【问题标题】:How define conditional "Field Selection" in mongodb 'find()' query?如何在 mongodb 'find()' 查询中定义条件“字段选择”?
【发布时间】:2011-10-21 07:59:05
【问题描述】:

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

{
  "_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} 
       } }
    );
}

提前感谢您的帮助, -埃里克

【问题讨论】:

    标签: search mongodb conditional selection field


    【解决方案1】:

    您可以像这样获取所有与用户 X 进行对话的用户:

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

    但是这不会做你想要的。您的架构遇到问题。您必须从用户对象中删除对话并将它们存储在一个专用集合中,以便单独查询特定对话。

    【讨论】:

    • 谢谢 Remon,你是对的,将对话移出我的对象会起作用。感谢您的回复,-埃里克
    猜你喜欢
    • 2023-02-14
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多