我在mongoDB中使用聚合方法进行分组,但当我使用$group时,它返回我用于分组的唯一字段.我试过$project,但也不管用.我也try 了$first,但结果数据的格式不同了.

我需要的响应格式如下所示:

{
    "_id" : ObjectId("5b814b2852d47e00514d6a09"),
    "tags" : [],
    "name" : "name here",
    "rating" : "123456789"
}

在我的查询中添加$group之后.响应是这样的,_id的值会发生变化.(而且$group只取_id,如果我try 任何其他关键字,它会抛出一个累加器错误.请解释一下.)

{
    "_id" :"name here" //the value of _id changed to the name field which i used in $group condition
}

我必须删除名称字段中的重复项,而不更改任何 struct 和字段.此外,我正在mongoose中使用nodeJS,因此请提供与之配套的解决方案.

推荐答案

您可以使用下面的聚合查询.

$$ROOT以每个名称保留整个文档,然后$replaceRoot以将文档提升到顶部.

db.col.aggregate([
  {"$group":{"_id":"$name","doc":{"$first":"$$ROOT"}}},
  {"$replaceRoot":{"newRoot":"$doc"}}
])

Mongodb相关问答推荐

用其他集合中的文档替换嵌套文档数组中的值

如何使用MongoDB对子文档进行条件投影?

在Mongoose中对嵌套文档设置时间戳,但不对父文档设置时间戳

除非满足某个条件,否则Mongo是否按日期排序?

Mongo Aggregate管道-另一个集合中的多个查找

MongoDB 投影按数组中的字符串长度排序

如何在查找 foreignField 中使用通配符?

如何将交易列表变成 token 数量的对象?

Mongo:投影不影响布尔值

如何聚合过滤器嵌套文档并从其他字段中获取值

查找对象是否在预保存钩子mongoose中更改

声明多个模式后无法从数据库中获取数据(mongoose + express + mongodb

如何使用sailsjs v0.10连接mongodb?

$elemMatch 的 MongoDB 索引

mongodb中类型不相等的查询

适用于 Windows 10 64 位的 MongoDB 下载

无法将 Mongoose 连接到 Atlas

判断字段是否存在于数组的子文档中

MongoDB 引用的最佳实践

Mongo 条件为key doesn't exist?