【问题标题】:MongoDB extended json to update objectidMongoDB扩展json更新objectid
【发布时间】:2022-06-24 01:27:56
【问题描述】:

我正在尝试使用 mongodb extended json 更新 ObjectId。

我正在使用下面插入文档。

collection.insertMany([{ parentQueryGroupId: { $oid :
"628fadb4d370987ac789c0cd" } }])

所以它就像parentQueryGroupId: { $oid : "628fadb4d370987ac789c0cd"一样存储。

但我需要将其存储为ObjectId("628fadb4d370987ac789c0cd")

这可以直接通过扩展 JSON 实现吗?问题是,服务器端查询是通用的。所以我从客户端发送数据,然后直接传递该 id 进行更新。但我需要它是 ObjectId 而不是对象。

如果存在$oid 键,我可以循环,然后我可以将其转换为ObjectId,但Mongoose 或MongoDB 是否原生支持?

【问题讨论】:

  • 根据docsCanonical ModeRelaxed Mode有区别,你用的是哪一个?如果您使用 Relaxed Mode 尝试:collection.insertMany([{ parentQueryGroupId: { Types.ObjectId("628fadb4d370987ac789c0cd") } }]) 类似:import {Types} from 'mongoose';
  • node js中如何定义这些模式?
  • 我不知道,我不与mongodb extended json 合作。我建议你试试我写的选项,看看它是否适合你......
  • 似乎文档仅适用于 bsondump mongodump mongoexport mongoimport 方法而不是单个方法。如果本机不支持它,那么我找到了另一个 npm 包“EJSON”,通过它我可以将扩展的 json 转换为 json。

标签: node.js json mongodb mongoose


【解决方案1】:

你可以试试这个,

const mongoose = require('mongoose'); 
const ObjectId = mongoose.Types.ObjectId;

collection.insertMany([{ parentQueryGroupId: {ObjectId("628fadb4d370987ac789c0cd")} }])

【讨论】:

  • 作为说明,万一不使用mongoose,直接使用mongodb中的ObjectId(从bson重新导出)
【解决方案2】:

我使用来自bson 包的EJSON 将其转换为如下适当的格式。

import { EJSON } from 'bson';

collection.insertMany(EJSON.deserialize([{ parentQueryGroupId: { $oid :
"628fadb4d370987ac789c0cd" } }]))

console.log(EJSON.deserialize([{ parentQueryGroupId: { $oid :
"628fadb4d370987ac789c0cd" } }])) // Outputs similar to: [{ parentQueryGroupId: ObjectId("628fadb4d370987ac789c0cd") }]

如果它不是扩展的 json,它没有问题。在没有扩展类型的情况下也能正常工作(除非你真的想按原样存储这些 $oid 格式,因为反序列化也会转换它们)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2020-05-10
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多