Far*_*rid 2 javascript arrays object mongoose mongodb
我试图将猫鼬中的两个查询合并为一个。
现在,我正在这样做:
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)
})
})
Run Code Online (Sandbox Code Playgroud)
我想User.find()对数据库进行单个查询,结果是我想要的所有文档的对象(或数组),例如[user, member]本例中的数组。这将使我不必再运行User.find()两次。理想情况下,我希望查询的结果是一个对象,这样我可以更轻松地找到特定的键/值集,而不是需要迭代遍历才能找到特定元素的数组。 我该怎么做呢?
注意:这有效:
User.find({ $or:
[
{ _id: req.body.userId },
{ username: decodedUser.username}
]}, (err, results) => {
console.log("results\n", results)
})
Run Code Online (Sandbox Code Playgroud)
results我想要的文档数组在哪里。但是,我想知道是否有更好的方法。
If you are expecting only one result by both of your conditions then you could use User.findOne - it will return the first found result.
User.findOne({ $or:
[
{ _id: req.body.userId },
{ username: decodedUser.username}
]}, (err, user) => {
console.log("user\n", user)
})
Run Code Online (Sandbox Code Playgroud)
编辑
因为您说过需要获得2个结果,并且想要得到结果,所以您还可以并行运行2个查询,并使用promises获得结果。例如
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 ) );
});
Run Code Online (Sandbox Code Playgroud)