使用Mongoose将文档移至另一个集合

arc*_*rcs 1 mongoose mongodb node.js

我正在尝试基于将Mongoose对象保存为两个集合的方法,将文档移动到MongoDB中的另一个集合

在示例中,他展示了如何创建两个新对象。我的目标是将其从一个集合转移到另一个集合。

更具体一点:在文档中,我列出了一些任务,这些任务最终会完成,然后应在该文档中移至另一个数组。但是,我需要能够查询所有未完成的对象,并且应该可以通过两个集合来进行查询。

arc*_*rcs 5

因此,您必须注册两次架构

let ChangeSchema = new Schema({
    title: String,
    version: Number
})

mongoose.model('First', ChangeSchema)
mongoose.model('Second', ChangeSchema)
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样交换它们

mongoose.model('First').findOne({ _id: id }, function(err, result) {

    let swap = new (mongoose.model('Second'))(result)
    /* you could set a new id
    swap._id = mongoose.Types.ObjectId()
    swap.isNew = true
    */

    result.remove()
    swap.save()

    // swap is now in a better place

})
Run Code Online (Sandbox Code Playgroud)

  • `doc = doc.toObject()`,它可以工作 (3认同)
  • 有点晚了但是......除非模式中的属性`_id` 设置为`String` 类型,那么猫鼬将期望一个`ObjectId`。如果您的 id 是字符串并且 mongoose 需要一个对象 id 使用 `mongoose.Types.ObjectId(id)`,如有必要,请事先使用 `mongoose.Types.ObjectId.isValid(id)` 进行验证 (2认同)