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

时间:2017-03-06 09:21:13

标签: mongodb

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

我想从Name对象数组中的字段CourseData中检索包含不同值的列表。由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();

1 个答案:

答案 0 :(得分:1)

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

例如,如果您想要设施pushd %~dp0 for /r %%f in ("*EG_*.exe") DO ("%~dp07za.exe" u "%%~ff" "%~dp0configs\config.cfg") pause exit 的名称字段的不同值,请运行此查询:

"a1b4844b-518b-40e2-8aa5-8ee399ac2d4e"

它将返回:

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