我有用户对象:
{
"_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/