如果条件查询mongo db

时间:2016-06-22 14:48:36

标签: node.js mongodb

我有一个包含公共或私人文件的集合。我希望有一个查询,可以通过_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
          }
        })

    }

任何帮助都会很棒!

1 个答案:

答案 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)}}
  }
]})