MongoDB 投影计数大于 2 的文档

标签 mongodb mongodb-query

我有一个类似的收藏

{
    "_id": "201503110040020021",
    "Line": "1", // several documents may have this Line value
    "LineStart": ISODate("2015-03-11T06:49:35.000Z"),
    "SSCEXPEND": [{
            "Secuence": 10,
            "Title": 1,
        },
        {
            "Secuence": 183,
            "Title": 613,
        },
        ...
    ],

} {
    "_id": "201503110040020022",
    "Line": "1", // several documents may have this Line value
    "LineStart": ISODate("2015-03-11T06:49:35.000Z"),
    "SSCEXPEND": [{
            "Secuence": 10,
            "Title": 1,
        },

    ],

}

SSCEXPEND 是一个数组。如果计数大于或等于 2,我正在尝试计算 SSC 数组和项目的大小。我的查询是这样的

db.entity.aggregate(
   [
      {
         $project: {
            SSCEXPEND_count: {$size: "$SSCEXPEND"}
         }
      },
      {
        $match: {
            "SSCEXPEND_count2": {$gte: ["$SSCEXPEND_count",2]}
         }
      }
   ]
)

我希望输出只是数组大小大于 2 的第一个文档。

项目部分工作正常,我可以得到计数,但我只需要投影那些计数大于或等于 2 但我的匹配部分不起作用的部分。谁能指导我哪里出错了?

最佳答案

您需要投影其他字段和您的 $match 管道只需要对新创建的字段进行查询,以根据数组大小过滤文档。像下面这样的东西应该可以工作:

db.entity.aggregate([
    {
        "$project": {
            "Line": 1,
            "LineStart": 1, "SSCEXPEND": 1,
            "SSCEXPEND_count": { "$size": "$SSCEXPEND" }
         }
    },
    {
        "$match": {
            "SSCEXPEND_count": { "$gte": 2 }
         }
    }
])

样本输出:

/* 0 */
{
    "result" : [ 
        {
            "_id" : "201503110040020021",
            "Line" : "1",
            "LineStart" : ISODate("2015-03-11T06:49:35.000Z"),
            "SSCEXPEND" : [ 
                {
                    "Secuence" : 10,
                    "Title" : 1
                }, 
                {
                    "Secuence" : 183,
                    "Title" : 613
                }
            ],
            "SSCEXPEND_count" : 2
        }
    ],
    "ok" : 1
}

关于MongoDB 投影计数大于 2 的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666685/

相关文章:

python - 如何判断一个字段是否存在?

javascript - 将 Mongoose 返回的数组转换为常规 JSON

javascript - mongodb中一条一条插入500k记录导致堆内存不足

javascript - 如何使用一组 ID 仅查找集合中的最新文档

MongoDB 和 Spring Data - 按名字/姓氏搜索用户

node.js - Mongoose Mongodb 查询对象数组

arrays - MongoDB - 仅投影数组中的匹配元素

database - 计算符合条件的数组元素

MongoDB - $setIntersection 与 $facet

javascript - MongoDB 计算对象内的对象