C# MongoDB。在数组中查找项目并仅选择此项

标签 c# mongodb

我有用户对象:

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

            ]
        }
    ]
}

我想通过用户id和汽车名称查找文档,然后选择这辆车。我正在尝试这样做:

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

结果,我想获得单个 Car 对象,但是,我得到的是 null。如何正确操作?

最佳答案

试试这个

        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();

这会生成以下聚合查询:

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

输出以下结果:

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

关于C# MongoDB。在数组中查找项目并仅选择此项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487401/

相关文章:

c# - 将 NULL 插入 DataTable

c# - WPF:如何高效地每秒更新图像 30 次

c# - Autofac - 单例接口(interface)解析为 transient

mongodb - 根据小时和 driverID 获取特定记录

mysql - 是否可以在 mysql 或 mongodb 中针对特定字段按顺序保存数据?

mongodb - elasticsearch与mongodb river一起引发异常工作

c# - 如何在C#中发送具有多个地址的电子邮件

c# - .NET 异步 Oracle 连接的方法

c# - mongodb C# 驱动程序更新多个字段

c# - 使用 C# 查询日期时间的 MongoDb 查询