mongodb - 从对象数组 MongoDB 获取不同的值

标签 mongodb

{
    "_id" : NUUID("f5050a5d-b3be-4de6-a135-a119436fb511"),
    "CoursesData" : [ 
        {
            "Name" : "Naturgræs",
            "Value" : 1
        }
    ],
    "FacilityType" : {
        "_id" : NUUID("a1b4844b-518b-40e2-8aa5-8ee399ac2d4e")
    }
}

我想从我的 CourseData 对象数组中的字段 Name 中检索具有不同值的列表。按 FacilityType._id 过滤。我尝试同时使用 $facetdistinct 运算符,但它似乎不喜欢对象数组。

我的结果应该是这样的(或类似的):

FacilityType (a1b4844b-518b-40e2-8aa5-8ee399ac2d4e),
CourseData: [Name1, Name2, Name3]

更新

根据下面给出的答案,如果有人需要这样做,这就是您使用 C# 驱动程序的方式。

  FieldDefinition<FacilityDocument, string> field = "CoursesData.Name";

  var result = FacilityCollection.Distinct(field, Builders<FacilityDocument>.Filter.Eq(x => x.FacilityType.ID, new Guid("a1b4844b-518b-40e2-8aa5-8ee399ac2d4e"))).ToList();

最佳答案

您可以使用 distinct() .它将从匹配查询的文档中返回特定字段的不同元素

例如,如果您想要设施 "a1b4844b-518b-40e2-8aa5-8ee399ac2d4e" 的名称字段的不同值,请运行此查询:

db.collection.distinct("CoursesData.Name", {"FacilityType._id": "a1b4844b-518b-40e2-8aa5-8ee39ac2d4e"})

它将返回:

[ "Naturgræs", ... ]

关于mongodb - 从对象数组 MongoDB 获取不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42621769/

相关文章:

node.js - 如何在 Mongoose 中使用聚合查询过滤$match等于Isodate

javascript - 如何在 KeyStone.js 中显式创建新用户

javascript - 我如何将 Mongoose 中的字符串大写?

带有子查询的 MongoDB $in

python - PyMongo 和 Flask 的 Jsonify 包含转义斜杠

mongodb - 如何更改 MongoDB mapreduce 结果的结构?

mongodb - Mongoose/MongoDB 在填充后执行 where

javascript - Mongoose:仅返回值

java - 有条件地计算聚合中的嵌套项目数

arrays - 如何在node js中的mongodb查询中传递var