【问题标题】:mongodb aggregation: group by _idmongodb聚合:按_id分组
【发布时间】:2015-03-28 06:37:06
【问题描述】:

聚合后我得到了这个结果。 _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?提前致谢。

【问题讨论】:

  • 是否需要包含_id?你在用_id 做什么?您可以从输出中抑制它。 ObjectId 是 ObjectId - 它不是字符串或任何可以直接用 JSON 表示的类型,您需要决定将其表示为 JSON 类型的策略。
  • 您可以使用toString()方法将_id转换为字符串,然后再发送给客户端。

标签: mongodb mongoose aggregation-framework


【解决方案1】:

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

但是,如果您不想这样做,那就这样做吧。

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

旧代码:

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

新代码:

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

更多信息:

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 是的,我知道。但是 _id 已经是 ObjectId 类型,我认为将它们更改为字符串类型更具挑战性。
    • 您可以使用 valueOf() 方法以小写十六进制字符串形式查找 ObjectId() 对象的值。示例:ObjectId("507c7f79bcf86cd7994f6c0e").valueOf() 它的值为:507c7f79bcf86cd7994f6c0e
    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2021-05-19
    • 2013-11-25
    • 1970-01-01
    • 2016-08-16
    • 2016-07-03
    • 2014-05-10
    • 1970-01-01
    相关资源
    最近更新 更多