【问题标题】:mongodb find with opposite of $elemMatchmongodb找到与$elemMatch相反的
【发布时间】:2015-10-27 10:34:58
【问题描述】:

我有一个这样的收藏:

posts = {
  title: 'Hey',
  content: '...',
  authors: [{
    id: 'id',
    name: 'John'
  }, {
    id: 'id2',
    name: 'david'
  }]
};

我想查询。我找到了 $elementMatch,但我想要相反。

我也找到了 $nin,但如果它适用于 mycase,我就没有。

这是我想做的:

db.posts.find({
  authors: {
    $notElemMatch: {
      id: 'id'
    }
  }
});

我想找到除某人写的帖子之外的所有帖子。

【问题讨论】:

    标签: javascript mongodb mongodb-query


    【解决方案1】:

    您甚至不需要$elemMatch,因为您只有一个字段条件。只需改用$ne

    db.posts.find({ "authors.id": { "$ne": 'id' } });
    

    有一个$not 条件,但这里确实不需要应用。

    【讨论】:

    • @sergiopereira 你错了。此处的语句将“正确”选择仅 no "authors.id" 值与提供的值匹配的文档。这正是OP所要求的。因此,由于数据包含"id" 作为条目之一,因此不会返回“post”。对于单个条件,您不需要 $elemMatch。我认为您在返回被该值“过滤”的“数组”内容时感到困惑。这当然与选择“帖子”完全不同。这就是问题所要问的。
    • @sergiopereira 也许您也不应该这么快就投反对票。除非你能真正证明一个案例,否则表达这样的观点或以那样的方式行事也不是一个好主意。 $elemMatch 经常被错误引用和滥用。因此,如果您要对某人的反应进行批评,那么您最好先有一个更好的工作答案。
    • @sergiopereira 不是在争论,而是在指出你处理事情的错误。当然,您可以撤消反对票。只有一个宽限期,你不能。但这已经过去了。
    • 虽然您确实回答了 OP 的具体情况,但您没有回答他真正提出的问题。因此,每个真正在寻找 $elemMatch 的对立面的人(在比 OP 更复杂的情况下)都没有答案。实际上回答这个问题并指出 OP 不需要它,会很好。
    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2023-03-24
    • 2013-11-24
    • 2012-04-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多