node.js - mongodb的if条件查询

标签 node.js mongodb

我有一个包含公开或私有(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/

相关文章:

mysql - 用于存储类似数组值查询的mysql列的mongodb架构设计

javascript - 咕噜 watch 不工作

javascript - 将 Mongoose 聚合函数返回 Angular

jquery - 通用 jQuery 和 Node.js

javascript - NodeJS Promise,延迟返回值

ruby-on-rails - 无法使用 rails generate 生成 mongoid 配置文件

macos - 无法在 Mac OS X 上运行 mongodb

mongodb - 使用 cmake 的 Yocto 食谱找不到 git

javascript - 为什么我无法使用 angularjs $http.get() 从服务器获取数据?

node.js - 如何使用supervisord "npm start"?