【发布时间】:2020-02-02 18:39:48
【问题描述】:
我有一个像下面这样的集合
我需要使用扩展的 json 将一个新对象推送到“stores”数组中。
如何指示 Mongodb 为属性 _id 创建一个新的 ObjectId ?
我想知道这样的事情:
{
'_id' : { '$oid' : '$<here_some_command_to_generate_new_oid_automatically>' },
'address' : 'my store address',
'contact' : 'John Doe'
}
【问题讨论】:
-
如果一个文档被插入到 MongoDB 中而没有任何
_id,服务器将自动分配一个 ObjectId 作为该文档的_id。也许澄清你为什么想要 ObjectId 为$oid以及你如何插入文档。 -
MongoDB 使用 BSON 类型来存储文档。 JSON 表示 BSON 支持的类型的子集。例如,当集合数据导出到 JSON 文件时,
ObjectId字段导出为OID(MongoDB 扩展 JSON);它在 JSON 中的表示是{"$oid": "<id>"},其中<id>是ObjectId的24 个字符的十六进制字符串。{"$oid": "<id>"}表示文档中_id键的值(它表示为 JSON 对象)。 -
继续... 导出的 JSON 文件可用于导入 MongoDB 集合,使用 mongoimport(
"$oid"将转换为ObjectId)。因此,您不能对文档使用带有$前缀的字段名称(它会产生错误)。那么问题来了:为什么要为字段/值使用ObjectId的扩展 JSON 版本? -
@kevinadi 是的,我知道对于新文档,_id 会自动创建。但是,如我的示例所示,我有一个对象数组,并且我需要每个对象都有一个唯一的(全局)ID。我不想在我的外部应用程序中创建这个 id,但我想利用 Mongodb 来创建它。
-
@KleysonRios 据我了解,数组中的文档,您希望
_id出现在这些文档中。所以,在这种情况下,我所做的是,我创建另一个模式并在父模式中引用它。通过这种方式,它会为孩子创建_id。虽然我不确定,但在你的情况下,这是否可能。
标签: mongodb mongodb-query