2016-07-05 88 views
1

我試圖將文檔移動到MongoDB中的另一個集合,基於此方法Saving Mongoose object into two collections用Mongoose將文檔移動到另一個集合

在這個例子中,他展示瞭如何創建兩個新對象。我的目標是將其從一個集合移到另一個集合。

更具體一點:在文檔中,我有一個最終完成的任務列表,然後應該在本文檔中移動到另一個列表中。但是,我需要能夠查詢所有未完成的,這應該是可能的兩個集合。

回答

1

所以,你必須註冊該模式的兩倍

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

mongoose.model('First', ChangeSchema) 
mongoose.model('Second', ChangeSchema) 

然後你可以換「時間喜歡這個

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 

}) 
+0

我不能讓這個解決方案工作。我得到一個錯誤'VersionError:找不到匹配的id爲「58b1512b8f361b717254fa59」的文檔''幾乎毫無意義地發現,如果我手動將文檔注入到集合中,那麼我就不會有這樣的錯誤,讓我相信我是缺少關於id部分的一個步驟。任何人都可以爲此解決方案添加更多細節 – stuffyjoelab

+0

@stuffyjoelab您需要首先將文檔切換。 '沒有找到id爲「58b1512b8f361b717254fa59」的匹配文件「'告訴你沒有他的id的文件。 – arcs

+0

有點遲了,但是...除非模式中的屬性'_id'設置爲'String'類型,否則貓鼬會期望一個'ObjectId'。如果你的id是一個字符串,並且貓鼬需要一個對象id,使用'mongoose.Types.ObjectId(id)',如果需要,事先用'mongoose.Types.ObjectId.isValid(id)'驗證 – Ben

相關問題