node.js - Node.js 和猫鼬。从一个集合中读取并写入另一个集合
问题描述
我正在尝试从一个 Mongo 集合中读取数据,然后获取所有数据并将其保存到新集合中。我使用相同的架构,但在两个不同的模型中更改集合名称:
用户信息.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 集合中:
备份.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)
}
}
})
}
我收到一个错误,似乎表明它在尝试保存信息时发现了重复项,即使备份集合为空。这让我觉得它正在尝试写入用户信息集合而不是备份。我创建了备份模型变量,这就是我运行保存的内容,这让我认为应该指定它运行到该集合。我在这里做错了吗?
这是错误:
VersionError:没有找到与 id 匹配的文档
解决方案
最简单的方法mongoose
是
UserInfo.aggregate([ { $match: {} }, { $out: "BackupUserInfo" } ])
否则,您可以使用mongodb
查询或 mongodb copyTo()
db.myoriginal.aggregate([ { $match: {} }, { $out: "mycopy" } ])
//OR
db.source.copyTo("target");
但copyTo()自 3.0 版以来已弃用。
推荐阅读
- elasticsearch - 为什么在周日 06:00 UTC 从 elasticsearch 中删除索引?
- jquery - Angular初始加载所有es js包文件
- java - 如何使用外部方法调用模拟在构造函数中初始化的对象?
- django - Django 将 SQL 包装为命令
- sas - proc工具栏是隐藏过程吗?
- php - PHP:setlocale 的价值从何而来?
- python - Python3 sqlite3从json数据加载表
- sql - 患者在首次出院后 30 天内再次入院(共 31 天)
- git - 如何解决远程 SSH 推送 github 错误
- javascript - Apollo 客户端查询在“网络”选项卡上提供数据,但某些字段的控制台为空