MongoDB如何比较单个文档中的字段?

时间:2018-02-28 09:27:18

标签: mongodb

鉴于集合“示例”:

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用agregation

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

答案 2 :(得分: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"
}