聚合缺少数据的嵌套文档

我有一个mongoDB集合,其中包含以下数据:


{

    "_id" : ObjectId("..."),

    "records" : [

        ISODate("2020-04-19T00:49:18.945Z"),

        {

            "_id" : ObjectId(""),

            "date" : ISODate("2020-05-07T04:49:55.643Z"),

            "text" : "someText"

        }

    ],

}

由于版本升级,中的值会有所不同。records


我想在所有文档中进行聚合,忽略丢失的数据。来自MongoDB的代码:聚合和展平数组字段records.text


db.collection.aggregate({$unwind : "records"},

                      {$project: {_id: 1, 'text': '$records.text'}})

抛出:


path option to $unwind stage should be prefixed with a '$': records

并修复来自这些方向的错误以容纳空字段:


db.collection.aggregate({$unwind : "records", includeEmpty: false},

                      {$project: {_id: 1, 'text': '$records.text'}})

抛出


A pipeline stage specification object must contain exactly one field.

如何将嵌套数组中的值聚合为可能为空的值?


凤凰求蛊
浏览 250回答 2
2回答

墨色风雨

您可以使用$exists过滤掉空的:db.collection.aggregate([    { $unwind: "$records" },    { $match: { "records.text": { $exists: true } } },    { $project: { _id: 1, text: "$records.text" }}    {$group: {_id: "$text", count: {$sum: 1}}},    {$sort: {count: -1}}])

www说

在第一个查询中,您缺少“$”,因为 record 是一个字段值,因此应以“$”作为前缀。最终查询将是:db.collection.aggregate({$unwind : "$records"},                       {$project: {_id: 1, 'text': '$records.text'}})我希望这对你有用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript