在 MongoDB 中过滤
Filter in MongoDB
我有这个型号:
public class DraftItem
{
public List<DraftNode> Nodes{ get; set; }
}
public class DraftNodes
{
...
public List<DraftTerm> Properties{ get; set; }
}
public class DraftTerm
{
public ObjectId Id{ get; set; }
public String Name { get; set; }
}
我需要根据 DraftTerm - Id 在 mongoDB 中过滤属性
我试过这样制作过滤器,但它不起作用:
FilterDefinition<DraftNodes> filter = Builders<DraftNodes>.Filter.ElemMatch(z => z.Properties, a => a.Id == id);
await db.GetCollection<DraftItem>("collection name")
.Find(filter )
.ForEachAsync(async document =>
{..}
在 mongoDB 中,如果我这样过滤,它会起作用:
db.getCollection('collection name').find({'nodes.properties.id': ObjectId('...')})
有没有办法使用 ElemMatch 和 Filter 进行过滤?
以强类型方式构建此查询的最简单方法是 运行 AsQueryable()
在您的集合上,然后使用如下所示的 LINQ 语法:
var query = Col.AsQueryable().Where(
x => x.Nodes.Any(n => n.Properties.Any(q => q.Id == objectId)));
var result = query.ToList();
一旦你 运行 你可以检查 MongoDB profiler 它将被翻译到聚合框架的 $match
阶段,就像你的查询一样:
"pipeline" : [
{
"$match" : {
"Nodes.Properties._id" : ObjectId("...")
}
}
]
我有这个型号:
public class DraftItem
{
public List<DraftNode> Nodes{ get; set; }
}
public class DraftNodes
{
...
public List<DraftTerm> Properties{ get; set; }
}
public class DraftTerm
{
public ObjectId Id{ get; set; }
public String Name { get; set; }
}
我需要根据 DraftTerm - Id 在 mongoDB 中过滤属性 我试过这样制作过滤器,但它不起作用:
FilterDefinition<DraftNodes> filter = Builders<DraftNodes>.Filter.ElemMatch(z => z.Properties, a => a.Id == id);
await db.GetCollection<DraftItem>("collection name")
.Find(filter )
.ForEachAsync(async document =>
{..}
在 mongoDB 中,如果我这样过滤,它会起作用:
db.getCollection('collection name').find({'nodes.properties.id': ObjectId('...')})
有没有办法使用 ElemMatch 和 Filter 进行过滤?
以强类型方式构建此查询的最简单方法是 运行 AsQueryable()
在您的集合上,然后使用如下所示的 LINQ 语法:
var query = Col.AsQueryable().Where(
x => x.Nodes.Any(n => n.Properties.Any(q => q.Id == objectId)));
var result = query.ToList();
一旦你 运行 你可以检查 MongoDB profiler 它将被翻译到聚合框架的 $match
阶段,就像你的查询一样:
"pipeline" : [
{
"$match" : {
"Nodes.Properties._id" : ObjectId("...")
}
}
]