mongodb聚合:按_id分组

时间:2015-01-29 05:58:28

标签: mongodb mongoose aggregation-framework

聚合后我得到了这个结果。 _id字段是每个类的id,我应用{$ group:{_ id:“$ _ id”,.....

[{ _id: 54c977314f5293b74ea54f96, subject: 'math' }, score: 73.5335 },
{ _id: 54c977314f5293b74ea54f96, subject: 'science' }, score: 56.2192 },
{ _id: 54c977314f5293b74ea54f96, subject: 'history' }, score: 82.8821 },
{ _id: 54c974bdff0d993b4ecf34ce, subject: 'math' }, score: 68.2598 },
{ _id: 54c974bdff0d993b4ecf34ce, subject: 'science' }, score: 77.8712 },
{ _id: 54c974bdff0d993b4ecf34ce, subject: 'history' }, score: 71.9218 },
                                 ...                                  ]

问题是_id值不是字符串类型。因此,当我向客户端发送JSON时,它表示格式错误的JSON。

如何获取字符串类型_id?提前谢谢。

2 个答案:

答案 0 :(得分:2)

不要自己形成JSON字符串。 使用JSON.stringify( output_from_aggregation )

但是,如果你不想这样做,那么就这样做。

  • 确保形成用双引号(")包裹的字符串,而不是单引号(')。单引号中的字符串在JSON中无效。
  • 您需要将_id值包装在字符串中。这是一个无效的十六进制数,因为它太大而无法解析。

旧代码:

...
{ _id: 54c974bdff0d993b4ecf34ce, subject: 'science' }, score: 77.8712 },
...

新代码:

...
{ _id: "54c974bdff0d993b4ecf34ce", subject: "science" }, score: 77.8712 },
...

更多信息:

答案 1 :(得分:1)

在您的情况下,_id是自动生成的,并且是BSON(二进制JSON)类型。 您可以手动选择_id作为String并写入其值。例如

db.collection.insert( { _id: "10", item: "box", qty: 20 } )

您可以在_id字段中查看文档以获取更多详细信息 http://docs.mongodb.org/manual/reference/method/db.collection.insert/