我有一个包含公共或私人文件的集合。我希望有一个查询,可以通过_id获取文档,并检查它是否是私有的。如果它是私有的,则需要检查请求该文档的用户是否是该对象的参与者。
这是对象:
{
"_id" : ObjectId("5769ae620e80ea1c7f8a997f"),
"owner" : ObjectId("5740edae95a1b4c043d033df"),
"private" : false,
"participants" : [
{
"uid" : ObjectId("5740edae95a1b4c043d033df"),
"notify" : true
}
],
"messages" : [ ]
}
这是我写的2步查询,并想知道我是否可以简化它
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
}
})
}
任何帮助都会很棒!
答案 0 :(得分:3)
MongoDB有$or
运算符,在这种情况下可以使用:
db.rooms.findOne({ $or: [
{
_id: pmongo.ObjectId(roomId),
private: { $ne: true }
}, {
_id: pmongo.ObjectId(roomId),
participants: {$eleMatch: {uid: String(user._id)}}
}
]})