C# Mongodb. Find item in array and select only this item

僤鯓⒐⒋嵵緔 提交于 2021-02-10 14:47:55

问题


I have User object:

{ 
    "_id" : ObjectId("599e670f2720317af451db9e"),
    "Cars" : [
        {
            "Name" : "Car 1",
            "Labels" : [
                {
                    "Label" : "Main", 
                    "Color" : "#F49973"
                }
            ]
        }, 
        {
            "Name" : "Car 2",               
            "Labels" : [    
                {
                    "Label" : "Main", 
                    "Color" : "#F49973"
                },
                {
                    "Label" : "Secondary", 
                    "Color" : "#E2E2E2"
                }

            ]
        }
    ]
}

I want to find document by user id and car name, then select this car. I am trying to do this:

 await _collection.AsQueryable().Where(u => u.Id == someId && u.Cars.Any(s => s.Name == someName))
                .Select(u => u.Cars[-1])
                .SingleOrDefaultAsync();

In result, I want to get single Car object, but, I get null. How to properly to do it?


回答1:


Try this

        var mongoClient = new MongoClient();
        var collection = mongoClient.GetDatabase("test").GetCollection<Rootobject>("test");

        ObjectId someId = new ObjectId("599e670f2720317af451db9e");
        string someName = "Car 1";

        var item = await collection.AsQueryable()
            .Where(x => x.Id == someId)
            .SelectMany(x => x.Cars)
            .Where(x => x.Name == someName)
            .FirstOrDefaultAsync();

This generates the below aggregation query:

{aggregate([{ "$match" : { "_id" : ObjectId("599e670f2720317af451db9e") } }, { "$unwind" : "$Cars" }, { "$project" : { "Cars" : "$Cars", "_id" : 0 } }, { "$match" : { "Cars.Name" : "Car 1" } }])}

which spits out the following results:

{ "Cars" : { "Name" : "Car 1", "Labels" : [ { "Label" : "Main", "Color" : "#F49973" } ] } }


来源:https://stackoverflow.com/questions/46487401/c-sharp-mongodb-find-item-in-array-and-select-only-this-item

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!