0

我有这个架构

{
    cc: [
          { user_id: "1", hasSeen:true}
         ,{ user_id: "2", hasSeen:false}
         ,{ user_id: "3", hasSeen:false}

    ]
    ,conversation: [{
        user_id: "1",
        text: "message by 1, to 2and3"
    }]
}
,{
    cc: [
          { user_id: "1", hasSeen:true}
         ,{ user_id: "2", hasSeen:false}
         ,{ user_id: "3", hasSeen:false}
         ,{ user_id: "4", hasSeen:false}
    ]
    ,conversation: [{
        user_id: "1",
        text: "message by 1, to 2,3and4"
    }]
}

这就是我设置“收件箱”数据库的方式。要查找有用户“1”的对话,我使用以下查询:

find({ cc:{$elemMatch:{ user_id:"1"}} })

它工作得很好,但它给了我两个结果。

现在我想找到只有用户 1,2 和 3 的元素。如果我使用这个查询

find({ cc:{$elemMatch:{ user_id:"1", user_id:"2", user_id:"3" }} })

它还给了我第二个元素,女巫还包括用户 4。(我不想得到它)。
我的意思是最后一个查询用作(sql)“或”运算符,我需要使用“和”运算符。

任何想法?

4

1 回答 1

0

以另一种方式解决,计算元素!

UserInbox.findOne( { 'cc.user_id': { $all: ["1","2","3"] }, cc:{ $size: 3 } } );

希望能帮助别人:)

于 2013-08-21T15:40:07.480 回答