我试图将Mongoose中的两个查询合并为一个。
现在,我这样做:
User.find({ _id: req.body.userId }, (err, user) => {
User.find({ username: decodedUser.username }, (err, member) => {
console.log("user\n", user)
console.log("member\n", member)
})
})
我想对数据库进行一次User.find()
查询,结果是我想要的所有文档的对象(或数组),例如[user, member]
的数组在这种情况下。这样我就不必再运行User.find()
两次了。理想情况下,我希望查询的结果是一个对象,这样我就可以更容易地找到一个特定的键/值集,而不是我必须迭代查找特定元素的数组。 我该怎么做?
注意:这有效:
User.find({ $or:
[
{ _id: req.body.userId },
{ username: decodedUser.username}
]}, (err, results) => {
console.log("results\n", results)
})
其中results
是我想要的文档数组。但是,我想知道是否有更好的方法。
答案 0 :(得分:5)
如果您希望两个条件只能得到一个结果,那么您可以使用User.findOne
- 它将返回第一个找到的结果。
User.findOne({ $or:
[
{ _id: req.body.userId },
{ username: decodedUser.username}
]}, (err, user) => {
console.log("user\n", user)
})
修改强>
由于您说您需要获得2个结果,并且您希望在结果中获得结果,您还可以并行运行2个查询并使用promises来获得结果。 E.g。
Promise.all([
User.find({ _id: req.body.userId }),
User.find({ username: decodedUser.username})
]).then( ([ user, member ]) => {
console.log( util.format( "user=%O member=%O", user, member ) );
});