Mongodb 如何将$in运算符与一对属性一起使用

Mongodb 如何将$in运算符与一对属性一起使用,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,以这个集合为例 /* 1 */ { "key" : 1, "b" : 2, "c" : 3 } /* 2 */ { "key" : 2, "b" : 5, "c" : 4 } /* 3 */ { "key" : 3, "b" : 7, "c" : 9 } /* 4 */ { "key" : 4, "b" : 7, "c" : 4 } /* 5 */ { "key" : 5, "

以这个集合为例

/* 1 */
{
    "key" : 1,
    "b" : 2,
    "c" : 3
}

/* 2 */
{
    "key" : 2,
    "b" : 5,
    "c" : 4
}

/* 3 */
{
    "key" : 3,
    "b" : 7,
    "c" : 9
}

/* 4 */
{
    "key" : 4,
    "b" : 7,
    "c" : 4
}

/* 5 */
{
    "key" : 5,
    "b" : 2,
    "c" : 9
}
我想使用$in操作符并编写一个查询来返回((2,3),(7,9))中的(b,c)等文档。这意味着“返回所有行,其中b是2,c是3,或者b是7,c是9。”

如何使用$in运算符来使用多个属性值

如果我使用以下查询

db.getCollection('test').find({
    $and:[

           {b:{$in:[2,7]}},
           {c:{$in:[3,9]}}
         ]
    })
然后我得到以下结果

(2,3)

(7,9)

(2,9)-->这是不需要的记录

在SQL世界中,这是可能的 挑选* 从演示 其中(b,c)在((2,3)、(7,9))中


Mongo DB中的等价物是什么?

如果我理解正确,那么您要做的就是获取所有对(2,3)、(2,9)、(7,3)、(7,9)。 但是您希望逐个匹配这些,因此您的有效对应该是(2,3)、(7,9)。为了满足这一点,您可以逐个匹配b和c,然后将它们与“或”配对

db.getCollection('test').find({
$or: [
       {$and: [ {b : 2}, {c : 3} ]},
       {$and: [ {b : 7}, {c : 9} ]}
     ]
})

我想使用$in操作符来实现这一点,我认为$in和$or操作不适用于大数据。如果我有10000条记录该怎么办。@AtulSureka我认为您不应该使用find(),那么您可以使用aggregate()和分组对作为新属性,并相应地与$in匹配。我没有关于他们表演的任何信息,只是想给你一个想法。