我有一个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}}
])
www说
TA贡献1775条经验 获得超8个赞
在第一个查询中,您缺少“$”,因为 record 是一个字段值,因此应以“$”作为前缀。最终查询将是:
db.collection.aggregate({$unwind : "$records"}, {$project: {_id: 1, 'text': '$records.text'}})
我希望这对你有用。
添加回答
举报
0/150
提交
取消