这个问题在这里已有答案:
鉴于集合“示例”:
{_id: 1, prediction: "H", result: "A"}
{_id: 2, prediction: "H", result: "H"}
{_id: 3, prediction: "A", result: "A"}
如何查找预测和结果值匹配的记录,我需要做什么?即。文件2和3?
找到所有“H”预测是:
db.example.find( { prediction: "H" } )
但我需要将文字“H”替换为同一文档的结果字段中的值。
编辑:对不起,我应该说我使用的是Mongo 3.6。
您可以使用聚合
db.example.aggregate(
[
{
$project:
{
_id: 1,
prediction: 1,
result: 1,
compare: { $eq: [ "$prediction", "$result" ] }
}
},
{
$match:
{
compare: true
}
}
]
)
您应该可以使用聚合查询执行此操作,尝试$redact
阶段:
db.test.aggregate(
[
{ $redact: {
$cond: {
if: { $eq: [ "$prediction", "$result" ] },
then: "$$DESCEND",
else: "$$PRUNE"
}
}
}
]
);
这将产生结果:
{ "_id" : 2, "prediction" : "H", "result" : "H" }
{ "_id" : 3, "prediction" : "A", "result" : "A" }
有关redact的更多信息可以在这里找到 - https://docs.mongodb.com/manual/reference/operator/aggregation/redact/#redact-aggregation
如果您使用3.6,这将有效。 refer this
db.getCollection('TEST').find( { $where: function() {
return this.prediction == this.result
} })
结果:
{
"_id" : 2,
"prediction" : "H",
"result" : "H"
}
{
"_id" : 3,
"prediction" : "A",
"result" : "A"
}