我是使用node和mongoose的新手开发人员,并想知道用mongoose链接查询的最佳方法是什么。我在下面做,它不起作用。
User.findByIdAndUpdate(req.params._id, user, { upsert: true })
.exec((err, updatedUser) => {
if (addedCollections) {
return User.findByIdAndUpdate(req.params._id, { $push: { _collections: { $each: addedCollections } } }, { upsert: true }).exec();
}
return new Query;
})
.exec(() => {
return User.findById(req.params._id).populate('_collections');
})
.exec((err, user) => {
res.json({ user });
})
如何链接多个查询?
答案 0 :(得分:9)
您可以使用承诺链,它看起来非常类似于您尝试做的事情:
User.findByIdAndUpdate(req.params._id, user, { upsert: true })
.then(updatedUser => {
if (addedCollections) {
return User.findByIdAndUpdate(req.params._id, { $push: { _collections: { $each: addedCollections } } }, { upsert: true });
}
})
.then(() => {
return User.findById(req.params._id).populate('_collections');
})
.then(user => {
res.json({ user });
})
.catch(err => {
res.status(500).json({ error : err });
});
答案 1 :(得分:1)
您可以使用Rx和mongoose-observables。使用Rx,.flatMap()等同于.then()。
var Rx = require('rx');
var observables = require('mongoose-observables');
/* get public header data, list of collections and projects */
router.get("/header", function(req, res) {
let articleTitle = observables.finder.find(Articles, '{}', ['title'], null);
let collectionTitle = observables.finder.find(Collections, '{}', ['title'], null);
Rx.Observable.forkJoin([articleTitle, collectionTitle])
.subscribe(
(docs) => res.json(docs),
(err) => console.error(err)
);
});
的更多示例