MongoDB / C#从数组中获取特定元素

时间:2017-11-04 19:54:02

标签: c# mongodb

让我们假设2个对象:

class A
{
    string id;
    List<B> items;
}

class B
{
    string color;
    string name;
}

我想在以下地址进行查询:

  

_ =&gt; _.id == myqueryid&amp;&amp; _.items.any(t =&gt; t.color ==“yellow)

到目前为止......太好了

现在,我想只恢复匹配的B类型对象,而不是整个对象;我怎么能这样做?

红利问题:有没有办法从B型对象中恢复单个字段?

这是现在的代码

var K = Driver.Find(_ => _.Id == Id && _.Items.Any(__ => __.Color == "Yellow"));

该部分有效。它恢复了正确的对象

var K = Driver.Find(_ => _.Id == Id && _.Items.Any(__ => __.Color == "Yellow").Project(P);

我的预测是:

Expression(_ => _.Ledger[-1])

但不知怎的,我没有得到我需要的数据。 如果我投射到动态并使用Include,我会得到它(以及_id),但它并不理想。

经过更多测试后

.Include(_ => _.items[-1].color).Exclude(_ => _._id));

我希望这会返回颜色,但它会返回匹配的B对象......

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的聚合。

var result = collection.Aggregate()
                .Match(_ => _.id == Id && _.items.Any(t => t.color == "yellow"))
                .Unwind<A>(new StringFieldDefinition<A>("items"))
                .ReplaceRoot<B>(new BsonValueAggregateExpressionDefinition<A, B>(@"$items"))
                .First();