У меня есть коллекция с документами, которые могут быть общедоступными или частными. Я ищу, чтобы иметь один запрос, который может получить документ с помощью _id и проверить, является ли он конфиденциальным. Если он является частным, ему необходимо проверить, является ли пользователь, запрашивающий документ, участником объекта.Если запрос условия для mongo db
Вот объект:
{
"_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
}
})
}
Любая помощь будет здорово!
Отлично! Позволь мне дать этот выстрел! –
просто получить производительность: вместо '$ ne: true' use' eq: false' – profesor79
Да, он должен давать немного больше скорости, но если свойство 'private' будет пустым, оно не будет выполнено, поэтому должно быть значение по умолчанию в Модель комнаты. –