为了账号安全,请及时绑定邮箱和手机立即绑定

聚合缺少数据的嵌套文档

聚合缺少数据的嵌套文档

凤凰求蛊 2022-08-04 10:29:19
我有一个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.textdb.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.如何将嵌套数组中的值聚合为可能为空的值?
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您可以使用$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}}

])


查看完整回答
反对 回复 2022-08-04
?
www说

TA贡献1775条经验 获得超8个赞

在第一个查询中,您缺少“$”,因为 record 是一个字段值,因此应以“$”作为前缀。最终查询将是:

db.collection.aggregate({$unwind : "$records"},
                      {$project: {_id: 1, 'text': '$records.text'}})

我希望这对你有用。


查看完整回答
反对 回复 2022-08-04
  • 2 回答
  • 0 关注
  • 249 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信