Как определить условный «Выбор поля» в запросе mongodb 'find ()'? - PullRequest
1 голос
/ 21 октября 2011

Можно ли условно указать поля, возвращаемые запросом.Вот мой пример использования: у меня есть объект с вложенными пользовательскими беседами следующим образом:

{
  "_id" : "someId",
  user_id: 'user1',
  conversations: 
  [ 
    { 
      user_id: 'user2',
      comments: 
      [    
        { 
          user_id: 'user2',
          text: 'Hi user1' 
        },
        { 
          user_id: 'user1',
          text: 'Hi user2' 
        },
      ] 
    }, 
    { 
      user_id: 'user3',
      comments: 
      [    
        { 
          user_id: 'user3',
          text: 'Hi user1' 
        }
      ]
    }, 
  ]
}

Я хотел бы разрешить всем пользователям искать и просматривать все объекты, но не разговоры, которыми они не владеют.Что-то вроде следующего:

findObj = function(criteria, user, callback) {
    Object.find({criteria}, {conversation: 
       {
          if (user_id == user.id || conversations[].user_id = user.id) {1} else {0} 
       } }
    );
}

Заранее спасибо за помощь, -Эрик

1 Ответ

0 голосов
/ 21 октября 2011

Вы можете получить всех пользователей, у которых есть разговоры с участием пользователя X, например:

db.users.find({$or:[{user_id: X}, {'conversations.user_id':x}]})

Однако это не будет делать то, что вы хотите. Вы столкнулись с проблемой в вашей схеме. Вы должны удалить разговоры из пользовательских объектов и сохранить их в выделенной коллекции, которая позволяет отдельно запрашивать конкретные разговоры.

...