gpt4 book ai didi

node.js - 使用 mongoose 在 MongoDB 中批量插入多个集合

转载 作者:可可西里 更新时间:2023-11-01 09:16:20 25 4
gpt4 key购买 nike

我有 2 个集合(datametaData)

data 模式是

{
_id: ......,
name: ......, //not unique
mobile: ......, // unique or null
email: ......, // unique or null
uniqueId: ......, // unique or null
}

插入至少需要一个唯一数据

metaData 架构是

{
_id: ......,
dataId: ......,//refrence from _id of data collection
key: ......,
value: ......
}

JSON 数组从客户端获取

[{
name: "abc",
mobile: 9999999999,
mData: {
c1: 123,
c2: "xyz"
}
},
{
name: "qwerty",
email: 'qwerty@mail.com',
mData: {
c1: 123,
c2: "zxc"
}
}
......
]

我遍历数组并将它们中的每一个都插入到 MongoDB 的两个集合中。

let Bulk = Data.collection.initializeUnorderedBulkOp();
dataArr.forEach(function(item) {
let data = service.generateData(item);
// data.query: {mobile: ..., email: ..., uniqueId: ...}
// if value exists then keys is also exists for mobile, email, uniqueId in query
Bulk.find(data.query).upsert().updateOne(data.doc);
});
Bulk.execute((e, d) => {
let metaBulk = MetaData.collection.initializeOrderedBulkOp();
let length = dataArr.length;
dataArr.forEach(function(data) {
Data.findOne(data.query).exec(function(err, data) {
length--;
for(let key in data["mData"]) {
let value = data["mData"][key] || "";
let mData = service.generateMdata(key, value, data._id);
metaBulk.find(mData.query).upsert().updateOne(mData.doc);
}
if(length == 0) {
metaBulk.execute();
}
});
});
});

我的解决方案现在运行良好,但是迭代 data 集合以查找 metaData 集合的 ID 需要花费大量时间。

我需要一种无需查找数据 ID 查询即可将数据批量插入 MongoDB 的方法。是否有任何选项可以在单个查询中使用 mongoose 对多个集合执行批量更新。

最佳答案

对于您的场景,单个命令中没有多个集合更新。在您的情况下,如果您可以在父集合中包含元数据数组,它可以使用带有 updateMany() 的单个命令插入数据。 MongoDB 还支持通过 db.collection.insertMany() 批量插入.

db.data.insertMany( [{ name: "abc",mobile: 9999999999, mData: { c1: 123, c2: "xyz"} },
{name: "qwerty",email: 'qwerty@mail.com',mData: { c1: 123, c2: "zxc" }}]);

您也可以使用 db.collection.bulkWrite()

关于node.js - 使用 mongoose 在 MongoDB 中批量插入多个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46704926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com