Search 如何定义“条件”;字段选择“;在mongodb';查找();询问?

Search 如何定义“条件”;字段选择“;在mongodb';查找();询问?,search,mongodb,conditional,selection,field,Search,Mongodb,Conditional,Selection,Field,是否可以有条件地指定查询返回的字段。以下是我的用例:我有一个对象,其中包含嵌套的用户对话,如下所示: { "_id" : "someId", user_id: 'user1', conversations: [ { user_id: 'user2', comments: [ { user_id: 'user2', text: 'Hi user1'

是否可以有条件地指定查询返回的字段。以下是我的用例:我有一个对象,其中包含嵌套的用户对话,如下所示:

{
  "_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} 
       } }
    );
}
我希望允许所有用户搜索和查看所有对象,但不允许查看他们不拥有的对话。具体如下:

{
  "_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} 
       } }
    );
}
提前感谢您的帮助,
-Eric

您可以获得所有与用户X进行对话的用户,如下所示:

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

但是,这不会满足您的要求。您的架构遇到了问题。您必须从用户对象中删除对话,并将其存储在一个专用集合中,该集合允许单独查询特定对话。

谢谢Remon,您是对的,将对话从我的对象中移出会起作用。谢谢你的回复,-埃里克