【问题标题】:MongoDB Node.JS insertOne error: "Type 'string' is not assignable to type 'ObjectId | undefined"MongoDB Node.JS insertOne 错误:“类型 'string' 不可分配给类型 'ObjectId | undefined”
【发布时间】:2022-03-22 21:55:00
【问题描述】:

我尝试将一个文档插入到集合中,但是当我指定插入文档的_id 字段时出现此错误。那么如何插入_id 类型不是ObjectId 的文档呢?

下面的代码给了我这个错误。当我删除_id 时,一切正常,但_id 将自动生成。我只是希望它是一个字符串类型。我知道这是可能的。我可以使用 MongoDB shell 制作_id 字符串。

async function foo() {
  const users = client.db("test").collection("users")
  users.insertOne({
    _id: "a string",
    name: "Tom",
    age: 26,
  })
}

【问题讨论】:

  • 如果默认的_id 字段已经自动递增,为什么还要覆盖它?如果你需要一个字符串,你不能只添加另一个字段吗?
  • 如果您想为 _id 使用自定义字符串,您需要在架构 mongoosejs.com/docs/guide.html#_id 中指定它,否则它需要专门的 ObjectId 或对象 id 的字符串版本(特定长度)。你在你的架构中这样做了吗?
  • @Psidom 出于某种原因,我只希望它是字符串...
  • @AlexanderStaroselsky 我已经浏览了您粘贴的这个链接。看来这不是MongoDB官方提供的驱动。我想知道我是否可以使用官方的mongodb 包来实现这一点?

标签: node.js typescript mongodb


【解决方案1】:

感谢您的回答和 cmets。我终于找到了解决办法。

async function foo() {
  await client.connect()
  const users = client.db("test").collection("users")
  const result = await users.insertOne({
    _id: "custom string",
    name: "Tom",
    age: 26,
  } as any)
  console.log(result)
}

我是 TypeScript 和 MongoDB 的新手。 mongodb包从普通JS转TypeScript不知道是不是这个bug。

【讨论】:

    【解决方案2】:

    如果您使用_id: string 输入您的收藏,它应该可以工作

    type usertype = {
      _id: string,
      name: string,
      age: number
    }
    
    async function foo() {
      await client.connect()
      const users = client.db("test").collection<usertype>("users")
      const result = await users.insertOne({
        _id: "custom string",
        name: "Tom",
        age: 26,
      })
      console.log(result)
    }
    

    这应该会给你想要的结果

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2022-06-29
      • 2021-09-26
      • 2018-09-29
      • 2019-11-15
      • 1970-01-01
      相关资源
      最近更新 更多