C# 查询documentdb中的子字段

C# 查询documentdb中的子字段,c#,mongodb,mongodb-.net-driver,aws-documentdb,C#,Mongodb,Mongodb .net Driver,Aws Documentdb,例如,我在下面有一个文档,用于收集=交付: { "doc": [ { "docid": "15", "deliverynum": "123", "text": "txxxxxx", "date": "2019-07-18T12:37:58Z" }, { "docid": "16", "deliver

例如,我在下面有一个文档,用于收集=交付:

{
    "doc": [
        {
            "docid": "15",
            "deliverynum": "123",
            "text": "txxxxxx",
            "date": "2019-07-18T12:37:58Z"
        },
        {
            "docid": "16",
            "deliverynum": "456",
            "text": "txxxxxx",
            "date": "2019-07-18T12:37:58Z"
        },
        {
            "docid": "17",
            "deliverynum": "999",
            "text": "txxxxxx",
            "date": "2019-07-18T12:37:58Z"
        }
    ],
    "id": "123",
    "cancelled": false
}
是否可以使用deliverynum=999进行搜索,结果如下所示

{
    "doc": [        
        {
            "docid": "17",
            "deliverynum": "999",
            "text": "txxxxxx",
            "date": "2019-07-18T12:37:58Z"
        }
    ],
    "id": "123",
    "cancelled": false
}
还是我应该为文档部分再收集一次


我在C语言中查询此类场景时遇到问题。

在Mongo shell中,您可以使用以下运算符:

db.collection.find({ "doc.deliverynum": "999" }, { "doc.$": 1 })
相应的C代码可以如下所示:

var q = Builders<Model>.Filter.ElemMatch(x => x.doc, d => d.deliverynum == "999");
var p = Builders<Model>.Projection.ElemMatch(x => x.doc, d => d.deliverynum == "999");

var data = Col.Find(q).Project(p).ToList();

如果要获取所有文档,即使不包含deliverynum=`999

也可以使用q=Builders.Filter.Empty,您希望文档是数组还是普通文档?@RakshithSm它是数组对象是。1个送货id=多个docidHi@mickl,谢谢。如果我可以添加另一个问题,我如何为delivernum=999添加排序,并获取具有最新日期的排序。考虑到我的单据可以是多个,且交货期=999?另外,如果仍然可以保留我的模型类型,因为使用投影会将其转换为Bson。@Sid这是可能的,但解决方案将完全不同。你能打开一个单独的问题并链接到这里吗?今天晚些时候,我将试着看一看这个问题。嘿,使用这个答案,我怎样才能将项目投影到ModelChild而不仅仅是Model?我想计算数据库中有多少modelchill和条件。我也为此提出了一个问题:您可以使用$replaceRoot,但为了使它更简单,只需运行Col.Findq.Projectp.ToList.Selectd=>d.doc,因为您知道将只从数据库返回此子文档OK,我这样做:DbSet.AsQueryable.SelectManyx=>x.Comments.where.Count;但这是在内存上运行还是在数据库上运行?