繁体   English   中英

猫鼬一对多的关系

[英]Mongoose one to many relationship

我有猫鼬模式与用户数据:

// user schema
const User = new Schema(
{
   name: {type: String},
   email: {type: String, unique: true},
   // other fields
})

和用户的每日统计架构:

// Stats schema
const Stats = new Schema(
{
  dateCreated: {type: Date, default: Date.now()},
  stepsWalked: {type: Number, default: 0},
  // other fields
  userId: String  // user id field
})

当我尝试使用相同的用户ID生成多个Stats模式对象时,如下所示:

for (let i = 0; i < 40; ++i) {
  statsData = await Stats.create({
    userId: userData._id
  })
}

我在循环的第二次迭代中遇到猫鼬重复异常。 堆栈跟踪:

MongoError: E11000 duplicate key error collection: 5909aed3df9db12e2b71a579_.stats index: userId_1 dup key: { : "5991c027a572690bfd322c08" }
at Function.MongoError.create (node_modules/mongodb-core/lib/error.js:31:11)
at toError (node_modules/mongodb/lib/utils.js:139:22)
at node_modules/mongodb/lib/collection.js:669:23
at handleCallback (node_modules/mongodb/lib/utils.js:120:56)
at node_modules/mongodb/lib/bulk/unordered.js:465:9
at handleCallback (node_modules/mongodb/lib/utils.js:120:56)
at resultHandler (node_modules/mongodb/lib/bulk/unordered.js:413:5)
at node_modules/mongodb-core/lib/connection/pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)

如何与猫鼬建立一对多关系? 我为单个用户提供了大量的统计数据,因此无法将统计数据存储为User模式的一部分,如下所示:

// user schema
const User = new Schema(
{
   name: {type: String, default: 'NaN'},
   email: {type: String, unique: true, default: 'NaN'},
   // other fields
   stats: [Stats]   // to many docs to store array in schema
})

我遇到了类似的问题,我得到了重复的关键错误。 对我来说,发生的事情是在一个子文档中,我之前在一个字段上分配了唯一约束。 更正该错误之后,我继续收到错误消息。 因此,我可以很好地创建一个实例,但是在创建第二个实例时总会出错。

对我来说,这里的另一位评论者提到的解决方法是删除该集合。 在删除集合之后,新文档和子文档的创建就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM