如何解决Node.js和猫鼬从一个集合中读取并写入另一个集合
我正在尝试从一个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匹配的文档
解决方法
在mongoose
中最简单的方法是
UserInfo.aggregate([ { $match: {} },{ $out: "BackupUserInfo" } ])
否则,您可以使用mongodb
查询或mongodb copyTo()
db.myoriginal.aggregate([ { $match: {} },{ $out: "mycopy" } ])
//OR
db.source.copyTo("target");
但是从版本3.0开始不推荐使用 copyTo()。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。