获取属性与嵌套在数组中的值匹配的所有对象

时间:2017-04-12 13:23:29

标签: mongodb asp.net-core mongodb-.net-driver

我有以下数据表:

{
"_id" : ObjectId("value"),
"owner" : "testuser",
"date" : ISODate("2017-03-16T12:45:03.386Z"),
"location" : "thuis",
"venue" : "bijna thuis",
"description" : "fghgfh",
"completed" : false,
"winnerName" : null,
"subscriptions" : [],
"interactions" : [ 
    {
        "_id" : ObjectId("objectid"),
        "owner" : "testuser",
        "type" : "guess",
        "date" : ISODate("2017-03-06T12:13:10.049Z"),
        "answer" : false,
        "message" : "test 1"
    }, 
    {
        "_id" : ObjectId("objectid"),
        "owner" : "testuser",
        "type" : "guess",
        "date" : ISODate("2017-03-06T12:13:10.049Z"),
        "answer" : false,
        "message" : "test 2"
    }
],
"__v" : 0,
"active" : true

}

以上只是一个游戏对象。这意味着我们在数据库中获得了几个这样的对象。 我试图只获得所有者==“testuser”的交互。 问题是我似乎无法找到最好的方法来做到这一点。 在我的代码中,我得到了2个对象(Game& Interaction),其中Game有一系列交互。

有没有我仍然可以使用mongocsharpdriver做到这一点。

提前感谢所有帮助。

2 个答案:

答案 0 :(得分:1)

希望它对你有用谢谢: - )

collection.Find(x => x.owner == "testuser").ToList(); //where collection is MongoDB collection

答案 1 :(得分:1)

感谢所有建议,并对迟到的回复感到抱歉。但我找到了解决这个问题的方法:

var filter = Builders<Game>.Filter.ElemMatch("interactions",
            Builders<Interaction>.Filter.Eq("owner", owner));
        var interactions = await MongoCollection.Find(filter).ToListAsync();

        return interactions.SelectMany(item => item.Interactions).ToList();

这将返回将某个用户作为所有者的所有互动。 希望我能用这个答案帮助别人。