【发布时间】:2020-05-22 18:44:25
【问题描述】:
$in 和 $or 在 MongoDB 中可以互相替换吗?
db.restaurants.find(
{
"borough" :{$in :["Staten Island","Queens","Bronx","Brooklyn"]}},
{
"restaurant_id" : 1,
"name":1,"borough":1,
"cuisine" :1
}
);
db.restaurants.find(
{
"borough": "Bronx" ,
$or : [
{ "cuisine" : "American " },
{ "cuisine" : "Chinese" }
]
}
);
我观察到这两个查询都需要我们从一些选项中进行选择:
将第一个查询中的 $in 替换为 $or 是否有意义,如下所示:
db.restaurants.find(
{ $or: [{ borough: 'Staten Island',
borough: 'Queens',
borough: 'Bronx',
borough: 'Brooklyn' }],
{ _id : 1,
name: 1,
borough : 1,
cuisine : 1
}
})
$in 和 $or 可以替换吗?
更新:
我尝试使用两个查询,希望得到相同的结果:
为什么第二个查询只选择了两行状态“D”?
> db.inventory.find( {status : { $in: [ 'A', 'D'] }}, {item:1, status: 1})
{ "_id" : ObjectId("5eb67598bee5213484d45087"), "item" : "journal", "status" : "A" }
{ "_id" : ObjectId("5eb67598bee5213484d45088"), "item" : "notebook", "status" : "A" }
{ "_id" : ObjectId("5eb67598bee5213484d45089"), "item" : "paper", "status" : "D" }
{ "_id" : ObjectId("5eb67598bee5213484d4508a"), "item" : "planner", "status" : "D" }
{ "_id" : ObjectId("5eb67598bee5213484d4508b"), "item" : "postcard", "status" : "A" }
>
>
> db.inventory.find( {$or: [ {status: 'A', status: 'D'} ] }, {item:1, status: 1})
{ "_id" : ObjectId("5eb67598bee5213484d45089"), "item" : "paper", "status" : "D" }
{ "_id" : ObjectId("5eb67598bee5213484d4508a"), "item" : "planner", "status" : "D" }
>
【问题讨论】: