我正在尝试从一个Mongo集合中读取数据,然后将所有这些数据保存到新的集合中。我使用的是相同的架构,但是在两个不同的模型中更改了集合名称:
UserInfo.js:
const mongoose = require('mongoose')
const userSchema = mongoose.Schema({
userID : String,
userName : String
})
let userInfo = mongoose.model('UserInfo', userSchema)
let backUpUserInfo = mongoose.model('BackUpUserInfo', userSchema)
module.exports = {
userInfo : userInfo,
backUpUserInfo : backUpUserInfo
}
我将数据插入到userinfos集合中,然后尝试读取该数据并将其插入到backupuserinfos集合中:
backup.js:
const UserInfo = require('../Schema/UserInfo').userInfo;
const BackUpUserInfo = require('../Schema/UserInfo').backUpUserInfo;
async function backUp(){
UserInfo.find({}, async function(err1, userInfo){
if (err1) return console.log(err1)
for(let i in userInfo){
try{
let backUpUser = new BackUpUserInfo(userInfo[i])
await backUpUser.save(function (err2, user) {
if (err2) return console.error(err2)
console.log("collection updated")
})
}
catch(err){
console.log(err)
}
}
})
}
我收到一个错误,似乎表明在尝试保存信息时找到了重复项,即使备份集合为空。这使我认为它正在尝试写入用户信息集合,而不是备份用户信息集合。我创建了backUp模型变量,这就是我运行时保存的变量,这使我认为应该指定该变量运行到该集合。我在这里做错什么了吗?
这是错误:
VersionError:找不到与ID匹配的文档
答案 0 :(得分:1)
在mongoose
中最简单的方法是
UserInfo.aggregate([ { $match: {} }, { $out: "BackupUserInfo" } ])
否则,您可以使用mongodb
查询或mongodb copyTo()
db.myoriginal.aggregate([ { $match: {} }, { $out: "mycopy" } ])
//OR
db.source.copyTo("target");
但是从版本3.0开始不推荐使用 copyTo()。