猫鼬在 findAndUpdate 时检查其他模式的值

时间:2021-07-27 11:32:00

标签: mongodb mongoose

我可以在 findAndUpdate 时检查其他 mongo 模式中的值吗?

示例:

架构 1:

{ _id: 'myId1', name: 'test' }

架构 2:

{ _id: 'myId2', name: 'test-rest', connectedId: [ 'myId1' ] }

现在我想在更新时检查 connectedId 是否有值名称

await MongoModel.findOneAndUpdate(
  { 
     _id: "myId",
     connectedId: { connectedValue.name === 'test' } // Now I want check if value from this connectedId has a value equal to my value
  },
  {
    name: "changeName"
  }
)

1 个答案:

答案 0 :(得分:0)

编辑:我完全忽略了您还想更新参考文档。但是,我会留下这个答案,以防其他人觉得它有用。

您应该结帐populate from Mongoose documentation。您可以在定义架构时添加对其他模型的引用:

connected: [{ type: Schema.Types.ObjectId, ref: 'OtherModelName' }]

OtherModelName 应该与您在调用 mongoose.model('OtherModelName', yourSchema); 时命名其他模型的方式相匹配。之后,您可以populate 带有某些条件的字段。此示例来自上述文档:

Story.
  find().
  populate({
    path: 'fans',
    match: { age: { $gte: 21 } },
    // Explicitly exclude `_id`
    select: 'name -_id'
  }).
  exec();

在你的情况下,它会像

YourModel
  .find()
  .populate({
    path: 'connected',
    match: {name: 'test'}
  })
  .exec();