假设我有以下文件

Article { Comment: embedMany }

Comment { Reply: embedMany }

Reply { email: string, ip: string }

我想做一个查询, Select distinct Reply.ip,其中Reply.email = xxx

像这样的东西,只是不起作用..

db.Article.find("Comment.Reply.email" : "xxx").distinct("Comment.Reply.ip")

JSON export:

{
   "_id":{
      "$oid":"4e71be36c6eed629c61cea2c"
   },
   "name":"test",
   "Comment":[
      {
         "name":"comment test",
         "Reply":[
            {
               "ip":"192.168.2.1",
               "email":"yyy"
            },
            {
               "ip":"127.0.0.1",
               "email":"zzz"
            }
         ]
      },
      {
         "name":"comment 2 test",
         "Reply":[
            {
               "ip":"128.168.1.1",
               "email":"xxx"
            },
            {
               "ip":"192.168.1.1",
               "email":"xxx"
            }
         ]
      }
   ]
}

I run : db.Article.distinct("Comment.Reply.ip",{"Comment.Reply.email" : "xxx"})

I expect : ["128.168.1.1", "192.168.1.1"]

I get : ["127.0.0.1", "128.168.1.1", "192.168.1.1", "192.168.2.1"]

推荐答案

mongo中的Distinct个查询条件如下

 db.Article.distinct("Comment.Reply.ip",{"Comment.Reply.email" : "xxx"})

而不是相反

EDIT:

我现在理解了这个问题,为了匹配/过滤子文档,我们需要使用$elemMatch操作符,如下所示

  db.Article.distinct("Comment.Reply.ip",{Comment: {$elemMatch: {"Reply.email" : "xxx"}}})

但是,如果子文档包含子数组(在您的例子中,您有一个回复数组),这将不起作用.有一个现存的问题,$elemMatch on subArray号已经打开.它计划用于mongo 2.1.你可以查看链接了解更多信息

Mongodb相关问答推荐

如何从MongoDB集合中获取第一个和最后一个元素?

MongoDB.ArrayFilters出错:在路径中找不到标识符';elem';的数组筛选器

Golang mongodb聚合错误:管道阶段规范对象必须包含一个字段

Next js、MongoDB和Prisma.包括不为相关字段工作

匹配/筛选/投影对象中数组中数组中的嵌套字段

MongoDB 聚合 - $project 和 $match 阶段未按预期工作

如何将记录从一个 mongo 数据库插入另一个?

在mongoose中添加多个验证

MongoDB 的 Java 语法

你如何在 Kubernetes 上设置 Mongo 副本集?

Mongo:统计一组文档中单词出现的次数

MongoDB Java API:put() 与 append()

将 MongoCursor from ->find() 转换为数组

没有数组的嵌入文档?

mongodb类型更改为数组

如何使用 Pymongo 在 MongoDB 中 Select 单个字段?

Mongodb错误:The positional operator did not find the match needed from the query

Mongodb 设计,嵌入与关系

使用 $in 进行不区分大小写的搜索

Spring Data MongoDB - 在哪里以编程方式为 Mongo 集合创建索引?