【问题标题】:Mongodb command for generate a new ObjectId using Extended JSON使用扩展 JSON 生成新 ObjectId 的 Mongodb 命令
【发布时间】: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": "&lt;id&gt;"},其中&lt;id&gt;ObjectId 的24 个字符的十六进制字符串。 {"$oid": "&lt;id&gt;"} 表示文档中 _id 键的值(它表示为 JSON 对象)。
  • 继续... 导出的 JSON 文件可用于导入 MongoDB 集合,使用 mongoimport("$oid" 将转换为 ObjectId)。因此,您不能对文档使用带有 $ 前缀的字段名称(它会产生错误)。那么问题来了:为什么要为字段/值使用 ObjectId 的扩展 JSON 版本?
  • @kevinadi 是的,我知道对于新文档,_id 会自动创建。但是,如我的示例所示,我有一个对象数组,并且我需要每个对象都有一个唯一的(全局)ID。我不想在我的外部应用程序中创建这个 id,但我想利用 Mongodb 来创建它。
  • @KleysonRios 据我了解,数组中的文档,您希望 _id 出现在这些文档中。所以,在这种情况下,我所做的是,我创建另一个模式并在父模式中引用它。通过这种方式,它会为孩子创建 _id 。虽然我不确定,但在你的情况下,这是否可能。

标签: mongodb mongodb-query


【解决方案1】:

除非我误解了你,如果你只需要使用客户端生成,你可以像任何驱动程序为顶级文档所做的那样做。

在java中生成扩展的json版本,你可以使用JsonWriterSettings,输出模式为JsonMode.Extended。像

JsonWriterSettings setting = JsonWriterSettings.builder().outputMode(JsonMode.EXTENDED).build();
Document id = new Document("_id", new ObjectId());
String extendedIdJson = id.toJson(setting);// {'_id' : { '$oid' : '507f191e810c19729de860ea' }}

【讨论】:

    猜你喜欢
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2015-09-12
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多