[编辑]:我使用一个非常具体的可重现的例子更新了上一个问题.
这是我的整个计划.
我创建了两个架构ASchema
和BSchema
与收藏A
,并B
分别使两个物体a
和b
,并尝试按顺序将它们保存-也就是说,第一a
则b
.
mongoose = require('mongoose'), Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/test'); ASchema = new Schema({ text: String }); BSchema = new Schema({ val: Number }); A = mongoose.model('A', ASchema); B = mongoose.model('B', BSchema); a = new A({text: 'this is a'}); b = new B({val: 5}); a.save(function(err) { if(err) console.log(err.message); else { console.log('saved a : ', a); b.save(function(err) { if(err) console.log(err.message); else { console.log('saved b : ', b); } }); } }); mongoose.disconnect();
我期望的应该发生:
它应该打印saved a :
后跟文档a,然后saved b :
是文档b.
实际发生的事情:
它打印saved a : { text: 'this is a', _id: 4ee4cab00d2c35fc04000001 }
,仅此而已.该计划也不会停止; 它仍然"卡住".
通过mongo shell,我发现已经创建了一个集合as
(a
由mongoose复数,也没关系),我可以在其中看到保存的文档db.as.find()
.但是,我找不到一个集合bs
.
调整:
在保存代码中,交换a
和b
(保存顺序)的位置导致b
保存,并且a
不保存.所以这个问题并不是专门用于a
或b
.
问题:为什么不保存下一个文件?
答案很简单,看看你的最后一行:
mongoose.disconnect();
你不应该这样做,因为仍然有需要处理的查询,你不知道什么时候(在我们的例子中它是第二个查询).所以会发生第一个查询被执行,Mongoose断开连接并挂起第二个查询.
解
最后mongoose.disconnect();
一个查询执行后删除最后一行.