繁体   English   中英

MongoDB:投影以匹配多个

[英]MongoDB: projection to match multiple

我在这里有点麻烦。 所以我想显示一个用户的个人资料。 用户属于组。 登录的用户可以查看他们共有的任何组的详细信息。 这是一些示例数据

{
  _id: "1234",
  battletag: "Fake#1234",
  guilds: [{
    name: "Lok'Narosh!",
    rank: 4,
    roles: ['casual']
  }, {
    name: "Warlords of Draenor",
    rank: 2,
    roles: ['PvP', 'raider']
  }, {
    name: "Lok'Tar Ogar!",
    rank: 3,
    roles: ['raider']
  }],
}

我可以得到当前用户的组,并将其简化为['Lok'Narosh!', 'Warlords of Draenor'] ,这意味着应该从结果中省略Lok'tar Ogar

我遇到的主要问题是,我知道的大多数操作仅返回第一个结果。 例如,使用$ elemMatch

$ elemMatch运算符将查询结果中字段的内容限制为仅包含与$ elemMatch条件匹配的第一个元素。

有没有一种方法可以过滤此列表以包含针对元素列表的所有匹配元素?

您可以使用聚合:

  1. $ unwind运算符可解构“行会”字段。
  2. 应用$ match条件
  3. 重建数组。

    db.getCollection('yourColl')。aggregate({$ unwind:“ $ guilds”},{$ match:{“ guilds.rank”:{$ gte:2.0}}},{$ group:{“ _id”: “ $ _id”,“ battletag”:{$ first:“ $ battletag”},“ guilds”:{$ addToSet:“ $ guilds”}}})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM