如何在C#Mongo DB驱动程序中过滤数组元素

时间:2018-11-22 10:17:55

标签: c# mongodb

我在这样的文档中有数组

 {
    "samples": [
        [
            25,
            "1535530415"
        ],
        [
            "45",
            "1535530415"
        ]
    ]
}

我尝试根据每个数组的第二个值获取值

我的过滤器查询是

 var collection = database.GetCollection<BsonDocument>("History");
        FilterDefinition<BsonDocument> filterDefintion = null ;
        ProjectionDefinition<BsonDocument> project = Builders<BsonDocument>.Projection.Include("samples").Exclude("_id");
        filterDefintion =  Builders<BsonDocument>.Filter.Eq("samples[1]","1535530415");

但是它得到一个空数组。如何在mongo c#驱动程序中过滤数组值。

1 个答案:

答案 0 :(得分:1)

您的样本文档包含一个数组数组。要在索引1处引用项目,您可以利用以下事实:在JS中,可以将数组视为对象,其中索引是属性,因此在您的情况下,您要存储的内容也可以解释为: / p>

{
    "samples": [
        {
            "0": 25,
            "1": "1535530415"
        },
        {
            "0": 45,
            "1": "1535530415"
        }
    ]
}

知道可以使用$elemMatch来引用正确的元素:

db.History.find({ "samples": { $elemMatch: { 1: "1535530415" } } })

或使用C#代码:

filterDefintion = Builders<BsonDocument>.Filter.ElemMatch<BsonDocument>("samples", new BsonDocument() { { "1", "1535530415" } });