我有一个查询蒙戈-DB采集困难。
我正在使用的文件
public class Customer
{
public ObjectId Id { get; set; }
public int CustomerId { get; set; }
public List<Address> Addresses { get; set; }
}
public class Address
{
public string Name { get; set; }
}
一些抽样数据
{
CustomerId: 2,
Addresses: [
{
Name: "Daniel"
},
{
Name: "Eric"
},
{
Name: "Dan"
}
]
}
我现在想查询由客户编号的文件,并筛选某些地址值的与喜欢%丹%一个名称返回的所有地址。 由于地址收集可以是巨大的我想已经过滤在查询时这些地址
var mdb = mongoClient.GetDatabase("test");
var collection = mdb.GetCollection<WebApi>("Customer");
var builder = Builders<Customer>.Filter;
var searchTerm = "Dan";
当查询一样,它的工作原理,但它拥有的所有地址:
var filter = builder.And(builder.Eq("InstallationId", 2),
builder.Regex("Addresses.Name", new BsonRegularExpression(".*" + searchTerm + ".*", "i")))
var result = collection.Find(filter).FirstOrDefault();
我想获得的是:
[
{
Name: "Daniel"
},
{
Name: "Dan"
}
]
要么
{
CustomerId: 2,
Addresses: [
{
Name: "Daniel"
},
{
Name: "Dan"
}
]
}
我也试过几种方法与骨料/匹配/项目,但不能让它开始工作。 “AsQueryable已”也可作为的IndexOf未在驱动程序中实现不起作用。
collection.AsQueryable().Where(x => x.CustomId == 2).SelectMany(x =>
x.Addresses.Where(a => a.Name.IndexOf(searchTerm, StringComparison.InvariantCultureIgnoreCase) >= 0).ToList();
二手版本:
- MongoDB.Driver v 2.6.1(也BSON)
- .Net框架4.5.2