有人可以告诉我怎么做
我有一个集合
a {
b: String
c: Date
d: ObjectId --> j
}
j {
k: String
l: String
m: String
}
Run Code Online (Sandbox Code Playgroud)
当我执行一个:
a.find({ b: 'thing' }).populate('d').exec(etc..)
Run Code Online (Sandbox Code Playgroud)
在后台这实际上是对MongoDB执行两个查询,以便返回所有项'j'?
我没有遇到填充工作的问题,我关心的是任务的性能影响.
谢谢
我正在使用 Node.js 请求库和 node-feedparser 来捕获提要,并将其发布到使用 Mongoose 的 MongoDB 数据库中。
我将帖子信息存储到帖子集合中,将提要信息存储到提要集合中,但我需要将 post._id 存储在提要集合中名为 feeds._post 的数组中。
我遇到的问题是使用流接口,在所有 feedparser.on('readable') 对数据库的异步调用完成之前调用 feedparser.on('end'),因此我最终得到假设 Post 集合中有 15 个帖子,而 Feed._post 数组中只有 11 个 post._id。
我知道如果这只是普通的 JavaScript,我可以使用 async 来确保 .on('end') 等待所有 .on('readable') 完成,但是我该如何处理流?
提前致谢。
db.Feed.findById(feedid, function(error, feed) {
// request.on('response') -> this.pipe(feedparser)
feedparser.on('readable', function() {
var post;
while (null !== (post = this.read())) {
db.Post.create({ /* post details */ }, function(err, post) {
feed._post.push(post);
});
}
});
feedparser.on('end', function() {
feed.save();
});
});
Run Code Online (Sandbox Code Playgroud) 我有一个模型,在初始化函数中我有以下代码:
this.listenTo(this, 'change:re change:read', this.patch);
Run Code Online (Sandbox Code Playgroud)
该补丁的功能如下:
patch: function(object) {
this.save(object.changed, { patch: true });
},
Run Code Online (Sandbox Code Playgroud)
在我的应用程序的其他地方,我可能会运行:
model.set({ re: 1 });
Run Code Online (Sandbox Code Playgroud)
要么:
model.set({ read: new Date() });
Run Code Online (Sandbox Code Playgroud)
这两个都很完美,但是当我打电话时:
model.set({ re: 1, read: new Date() });
Run Code Online (Sandbox Code Playgroud)
该补丁函数被调用两次,并有两个往返到服务器.如果可能的话,我想保持这一次往返.
任何人都可以帮助这个吗?
非常感谢
大卫