首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试筛选mongo db中的字段时出现意外结果

尝试筛选mongo db中的字段时出现意外结果
EN

Stack Overflow用户
提问于 2016-01-12 03:52:18
回答 1查看 39关注 0票数 0

我有一个结构如下的文档:

代码语言:javascript
复制
{
  _id: "someid",
  games: [{
    slug: "world-of-warcraft",
    class: 'shaman'
  }, {
    slug: 'starcraft-ii',
    class: 'zerg'
  }],
  roles: {
    'starcraft-ii': ['player'],
    'world-of-warcraft': ['player']
  }
}

我正在尝试对其进行过滤,以便在starcraft-ii中扮演player角色的所有玩家只显示游戏数组中的starcraft-ii。我执行以下操作:

代码语言:javascript
复制
function getUsersInGame(slug) {
  return Users.find({
    'games.slug': slug,
    [`roles.${slug}`]: 'player'
  }, {
    fields: {
      'games.$': 1,
      'roles': 1
    }
  });
}

但是,这在游戏数组中并不匹配,而是返回一个带有world-of-warcraft的1元素数组。

在mongo中过滤这个数组的合适方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-01-12 07:23:35

在字段中使用$elemMatch,因为$将返回数组的第一个元素。因此,您的查询应该如下所示:

代码语言:javascript
复制
function getUsersInGame(slug) {
   return Users.find(
    {
      '"roles.'+ slug + '"': { $in : ['player']}
    }, 
    {
      'games': {
          $elemMatch: {'slug': slug}
      },
      'roles': 1
    });

请注意与文档的区别:

“$运算符根据查询语句中的一些条件来投影数组元素。

$elemMatch投影运算符采用显式条件参数。此允许您基于查询之外的条件进行投影...“

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34729891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档