- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在用 Node.js 编写一个脚本,它需要执行以下操作:
我已经研究了一段时间,得出的结论是,使用异步 mongodb 几乎不可能做到这一点。问题是多方面的,但是例如,如果您要处理 20,000 个这样的节点,那么异步执行会挂起脚本。但是,由于第 4 步需要查看对象是否已经存在,因此将它们作为批量插入进行是不可行的。
可以将一些可怕的东西拼凑在一起,缓存创建的对象,然后将它们保存为类似于步骤 7 的内容,但这会很困难,因为对象要进入多个集合,您需要尝试在第 4 步首先从缓存中查找对象,然后从数据库中查找。如果这是解决方案,那么我将把 Javascript 注销为损坏,然后用 perl 编写它。所以我的问题是,对于像上述 Action 序列这样简单的事情,我可以以某种方式强制 mongodb同步,这样我的脚本就不会变得疯狂吗?我希望能够说 document.save() (顺便说一下,我正在使用 Mongoose),然后让它在实际保存后才返回。
编辑:添加代码
这从循环中调用了大约 20000 次。我不在乎(在合理范围内)需要多长时间,但是 200,000 次异步调用保存会挂起脚本,所以它不可能是这样(那时它还使用了超过 1.5gig 的 ram)。如果我不能让 hObj.save(); 等到对象被实际保存,那么我将需要用更强大的语言编写它。
models('hs').findOne({name: r2.$.name}, function (err, h) {
if (err) {
console.log(err);
} else {
var resultObj = createResult(meeting, r1, r2);
if (h == undefined) {
var hObj = new models('hs')({
name : r2.$.name,
results : [resultObj],
numResults : 1
});
hObj.save();
} else {
h.results.push(resultObj);
h.numResults++;
h.save();
}
}
});
最佳答案
来自 async github页面:
eachSeries(arr, iterator, callback)
The same as each, only iterator is applied to each item in arr in series. The next iterator is only called once the current one has completed. This means the iterator functions will complete in order.
所以假设你在 nodes
中有你的 XML 节点async.eachSeries(
nodes,
// This will be applied to every node in nodes
function (node, callback) {
models('hs').findOne({name: r2.$.name}, function (err, h) {
if (err) {
console.log(err);
} else {
// Async?
var resultObj = createResult(meeting, r1, r2);
if (h == undefined) {
var hObj = new models('hs')({
name : r2.$.name,
results : [resultObj],
numResults : 1
});
hObj.save(function (err, p) {
// Callback will tell async that you are done
callback();
});
} else {
h.results.push(resultObj);
h.numResults++;
h.save(function (err, p) {
// Callback will tell async that you are done
callback();
});
}
}
});
},
// This will be executed when all nodes has been processed
function (err) {
console.log('done!');
}
);
关于javascript - 如何强制 Mongoose Save() 调用同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968977/
当我保存4条记录时,我需要将它们一一保存,所以我的代码是 a.save(function(){ b.save(function(){ c.save(function(){ d.save(f
Mongoose在版本4.2.7中创建了一个新的单个子文档功能(documentation和feature request),允许使用单个嵌入式子文档架构,其行为方式与一对多子文档的行为相同。 在父级
Mongoose 版本 >= 4.0 有一个时间戳选项,当 timestamps 设置为 时,该选项会为架构创建 updatedAt 和 createdAt 字段正确。 http://mongoose
我注意到某些图书馆喜欢 mock 鹅 ( https://github.com/mccormicka/Mockgoose/blob/master/test/index.spec.js ) 使用 req
我正在与 Mongoose 合作。我见过很多开发者发出以下命令: mongoose.Promise = global.Promise; 然后我很好奇 mongoose.Promise 的原始值是什么。
当我运行与数据库大量连接和断开连接的测试时,我收到以下警告。 (node) warning: possible EventEmitter memory leak detected. 11 connec
我可以在 Mongoose 的子文档数组中填充动态引用(使用“refPath”)虚拟字段吗? 数据结构如下 Group - Members -> User 代码:模型/模式 let MemberSc
我正在我的应用程序中做一些测试,看看内存缓存是否真的在工作。但是,由于 memory-cache 显然没有公开“命中”事件,我无法判断是否真的从缓存中获取数据。所以我试着看看当应用程序实际从数据库中获
我是 nestjs 的新手。我使用 @nestjs/mongoose,我需要在我的类模式中引用嵌套对象中的几个字段,但我不知道该怎么做。 dietDays 对象必须包含一个日期字段和包含对 Meal
我是 mongodb 的新手,我有一个这样的数据模型 { last_updated: Date.now(), csgo_items:[ {name: 'name', p
这是我的方案: var documentSchema = mongoose.Schema({ 'facts': [{ 'type': { type: String, requi
我想删除多个 _ids = ['123', '234', '345']; _ids.forEach(_id => { await model.deleteOne({ _id }); }); 有没有
我有一个像这样的 Mongoose 模式: var Address = { doorNo:String, city:String, state:String, coun
我的文档包含一个名为 clients 的字段那应该包含一组客户端ID。 { "first_name":"Nick", "last_name":"Parsons", "email":"nic
我遇到了以下我无法理解的代码行,尽管有很多教程提供了与 populate 的示例相关的信息。但没有一个能解释它究竟意味着什么。这是一个例子 var mongoose = require('mongoo
我有一个具有多个唯一性的架构,如下所示: var userSchema = new mongoose.Schema({ user: { type: String, unique:
我有一个 Mongoose 模式,其中有 4 个子模式。我一直在关注这里的文档https://github.com/LearnBoost/mongoose关于嵌入文档 var scenarios =
我希望每个字符串属性都默认设置为 true。有办法吗? ?? mongoose.Schema.String -> default { trim: true } var schema = new Sch
我有这个代码 var ClientSchema = new Schema({ name: {type: String, required: true, trim: true} }); var Cl
许多教程告诉您在您的 userSchema 页面中使用 bycrypt。保存新用户后,它会附带加密密码。伟大的。然而,我想,当我用某些东西编辑用户时,它也会重新哈希密码,导致无法登录。你能给我一个解决
我是一名优秀的程序员,十分优秀!