{
"_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
过滤。我尝试同时使用 $facet
和 distinct
运算符,但它似乎不喜欢对象数组。
我的结果应该是这样的(或类似的):
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/