MongoDB对象的部分匹配

时间:2018-01-08 11:04:35

标签: mongodb

我试图在MongoDB中编写一个查询,根据字段是否与给定对象部分匹配来提取某些对象。

我的MongoDB集合中的对象看起来与此类似:

  {
    permissions: {
      records: [
        "add",
      ]
    }
  }

我希望能够通过查询给定用户的权限来检索相关对象。

例如,如果我使用以下对象查询:

  {
    permissions: {
      records: [
        "add",
        "delete"
      ],
      folders: [
        "delete",
      ]
    }
  }

我想要从集合中返回与查询对象部分匹配的对象,这可能就是这些:

  {
    permissions: {
      records: [
        "add",
      ]
    }
  },
  {
    permissions: {
      records: [
        "delete",
      ],
      folders: [
        "delete",
      ]
    }
  }

如果有人能给我任何指导,那就非常感激了!

1 个答案:

答案 0 :(得分:1)

我认为这应该有效:

db.tutorials.find({
    $or: [
        { "permissions.records": { $elemMatch: { $in: ["add", "delete"] } } },
        { "permissions.folders": { $elemMatch: { $in: ["delete"] } } },
        { "permissions.logs": { $elemMatch: { $in: ["add", "delete"] } } },
        { "permissions" : { $exists: false}}
    ]
})