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

时间:2018-07-03 08:17:08

标签: 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,
    "b" : 2,
    "c" : 9
}

我想使用$ in运算符并编写查询以返回文档(b,c)IN((2,3),(7,9))。这意味着“同时返回b为2并且c为3的所有行,或者b为7并且с为9的所有行。”

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

如果我使用以下查询

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

           {b:{$in:[2,7]}},
           {c:{$in:[3,9]}}
         ]
    })

然后我得到以下结果

(2,3)

(7,9)

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

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

Mongo DB中的等效功能是什么?

1 个答案:

答案 0 :(得分:0)

如果我做对了,那么您正在做的就是获取所有对(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} ]}
     ]
})