带条件项目第二个参数的MongoDB查找
让这些命令出现在MongoDB shell中:带条件项目第二个参数的MongoDB查找,mongodb,Mongodb,让这些命令出现在MongoDB shell中: > use testDB > db.testCol.insertMany([ { score: 5 }, { score: 8 } ]) 现在,我想获取所有收集的数据,但是使用find的条件投影。 因此,假设我想在结果文档中包含score字段,仅当score值大于6时 像这样的事情(错误): > db.testCol.find({}, { score: { $gt: 6 } }) 我的目标结果: { "_id&quo
> use testDB
> db.testCol.insertMany([ { score: 5 }, { score: 8 } ])
现在,我想获取所有收集的数据,但是使用find
的条件投影。
因此,假设我想在结果文档中包含score
字段,仅当score
值大于6
时
像这样的事情(错误):
> db.testCol.find({}, { score: { $gt: 6 } })
我的目标结果:
{ "_id" : ObjectId("...") }
{ "_id" : ObjectId("..."), "score": 8 }
我怎么做?仅使用
find
方法?您可以从MongoDB v3.6开始使用条件运算符$cond
,在条件不匹配时删除字段
- MongoDB 4.4版:
- MongoDB 3.6或以上版本:
您可以从MongoDB v3.6开始使用条件运算符
$cond
,在条件不匹配时删除字段
- MongoDB 4.4版:
- MongoDB 3.6或以上版本:
我得到:
“不受支持的投影选项:分数:{$cond:[{$gt:[\“$score\”,6.0]},\“$score\”,\“$$REMOVE\”]}
我的版本是4.2.7
好了,找到()中的$cond投影将是mongodb v4.4中的支持格式,为此你需要使用聚合(),我正在更新我的答案,不需要。我的版本不是最新的。我只是寻找了最新的答案。我得到:“不受支持的投影选项:score:{$cond:[{$gt:[\“$score\”,6.0]},\“$score\”,\“$$REMOVE\”]}”
我的版本是4.2.7
好的。find()中的$cond投影将支持mongodb v4.4,为此,您需要使用aggregate()我正在更新我的答案,不需要。我的版本不是最新的。我只是在寻找最新的答案。
db.testCol.find({},
{
score: {
$cond: [{ $gt: ["$score", 6] }, "$score", "$$REMOVE"]
}
})
db.collection.aggregate([
{
$project: {
score: {
$cond: [{ $gt: ["$score", 6] }, "$score", "$$REMOVE"]
}
}
}
])