【问题标题】:is mongoose generated sub-document _id uniquemongoose 生成的子文档 _id 是否唯一
【发布时间】:2018-06-25 08:18:30
【问题描述】:

使用以下猫鼬模式

mongoose.Schema({
    world: String,
    color: [{ name: String }]
});

为我提供包含 _id 字段的子文档的文档。

{ _id: 'a9ec8475bf0d285e10ca8d42'
  world: 'matrix', 
  color: [
    { name: 'blue',  _id: '4a8c0e12135fa32e13db9ce9' },
    { name: 'red',   _id: '4a8c0a62254cd32e13db4ad8' },
    { name: 'white', _id: '4a8c04e2687ea32e13db1da7' }
]

我想知道这些子文档 _id 中的每一个是否在所有文档中都是唯一的,或者仅在它所在的嵌套级别中是唯一的。

编辑:子文档不引用另一个集合,它是使用上面的普通猫鼬模式创建的。

【问题讨论】:

标签: javascript node.js mongodb mongoose schema


【解决方案1】:

我假设子文档引用了另一个集合。 如果我的假设是正确的,那么您拥有的嵌套文档仅在嵌套级别上是唯一的。

【讨论】:

  • 它不引用另一个集合。它是用问题中的简单猫鼬模式创建的。
  • 你能展示你用来插入集合的代码吗?
  • 这是一个猫鼬操作:new model({ world: 'matrix', color: [{name: 'red'}, {name: 'blue'}, {name: 'white'}] })
【解决方案2】:

这是 Mongoose 的问题。 Mongoose 在幕后为每个嵌套对象创建模式。这意味着 _id 仅在嵌套级别上是 unquie。

Look at this previous question关于如何防止这种情况发生

【讨论】:

  • 有没有办法让这个 _id 在整个集合中独一无二?
  • 您可以自己分配_id值。 npm 上有 UUID 包来实现这一点。
猜你喜欢
  • 2020-10-27
  • 2018-02-09
  • 1970-01-01
  • 2014-08-27
  • 2013-05-17
  • 2014-01-04
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多