MongoDB如何比较单个文档中的字段? [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

鉴于集合“示例”:

{_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。

mongodb
3个回答
0
投票

您可以使用聚合

    db.example.aggregate(
       [
         {
           $project:
              {
                _id: 1,
                prediction: 1,
                result: 1,
                compare: { $eq: [ "$prediction", "$result" ] }
              }
         },
         {
           $match:
              {
                compare: true
              }
         }
       ]
    )

2
投票

您应该可以使用聚合查询执行此操作,尝试$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


0
投票

如果您使用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"
}
© www.soinside.com 2019 - 2024. All rights reserved.