我有一个包含公开或私有(private)文档的集合。我希望有一个查询可以通过 _id 获取文档并检查它是否是私有(private)的。如果它是私有(private)的,则需要检查请求文档的用户是否是该对象的参与者。
这是对象:
{
"_id" : ObjectId("5769ae620e80ea1c7f8a997f"),
"owner" : ObjectId("5740edae95a1b4c043d033df"),
"private" : false,
"participants" : [
{
"uid" : ObjectId("5740edae95a1b4c043d033df"),
"notify" : true
}
],
"messages" : [ ]
}
这是我编写的两步查询,想知道是否可以简化它
function getRoom(roomId, user){
db.rooms.findOne({ _id: pmongo.ObjectId(roomId) })
.then(room => {
if(room.private){
return db.rooms.findOne({
_id: pmongo.ObjectId(roomId),
participants: {$eleMatch: {uid: String(user._id)}}
})
} else {
return room
}
})
}
任何帮助都会很棒!
最佳答案
MongoDB 有 $or
在这种情况下可以使用的运算符:
db.rooms.findOne({ $or: [
{
_id: pmongo.ObjectId(roomId),
private: { $ne: true }
}, {
_id: pmongo.ObjectId(roomId),
participants: {$eleMatch: {uid: String(user._id)}}
}
]})
关于node.js - mongodb的if条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37971513/