从集合

时间:2017-10-10 21:32:32

标签: mongodb mongodb-.net-driver

(我对mongodb来说是全新的)

假设集合Entities为:

{
"_id":...,
"name":"Entity1",
"properties": {
    "property1":{
      "name:"name1",
      "value:"value1"    
    },
    {
    "property2":{
      "name:"name2",
      "value:"value2"    
    },
    {
    "property3":{
      "name:"name3",
      "value:"value3"    
    }
  }
},
{
"_id":...,
"name":"Entity2",
"properties": {
    "property1":{
      "name:"name1",
      "value:"value1"    
    },
    {
    "property2":{
      "name:"name2",
      "value:"value2"    
    },
    {
    "property3":{
      "name:"name3",
      "value:"value3"    
    }
  }
}

在C#模型中:

public class Entity {
  public ObjectId _id;
  public string Name;
  public Dictionary<string, Property> Properties;
}

我想使用c#mongodb linq从property2返回Property(类型Entity1)。

我知道如何在shell中查询它但我的问题是无论我尝试在c#linq中查询实体集合,它似乎总是返回实体。找不到它返回子类型的方法。

有可能吗?

PS。 只是为了强调它的返回类型问题而不是查询,我可以在对象内重复“property2”键以进行查询。

1 个答案:

答案 0 :(得分:1)

您可以使用以下查找查询。

var result = collection.
  Find(x => x.Name == "Entity1").
  Project(p => p.Properties.Single(s => s.Key == "property2")).
  Single(s => s.Key == "property2").Value;