从子文档数组中获取部分模型数组(MongoDB C#Driver)

时间:2016-05-01 14:58:44

标签: c# mongodb mongodb-.net-driver

我正在尝试接收新阵列,只使用MongoDB C#Driver填充子字段。例如,我有以下文件:

{
    "_id" : "fca739d0-cddd-4762-b680-597d2996404b",
    "Status" : 1,
    "AccountId" : "1112",
    "Timestamp" : ISODate("2016-04-27T13:46:01.888Z"),
    "CartItems" : [ 
        {
            "ProductId" : "222",
            "Price" : 100,
            "ShippingPrice" : 20,
            "Quantity" : 3
        }, 
        {
            "ProductId" : "504",
            "Price" : 200,
            "ShippingPrice" : 20,
            "Quantity" : 2
        }, 
        {
            "ProductId" : "504",
            "Price" : 200,
            "ShippingPrice" : 20,
            "Quantity" : 1
        }, 
        {
            "ProductId" : "504",
            "Price" : 200,
            "ShippingPrice" : 20,
            "Quantity" : 1
        }
    ]
}

我正在尝试接收带有CartItems的新数组且只有ProductId的文档,因此响应将如下所示:

{
    "_id" : null,
    "Status" : 0,
    "AccountId" : null,
    "Timestamp" : ISODate("2016-04-27T13:46:01.888Z"), (**default)
    "CartItems" : [ 
        {
            "ProductId" : "222",
            "Price" : 0,
            "ShippingPrice" : 0,
            "Quantity" : 0
        }, 
        {
            "ProductId" : "504",
            "Price" : 0,
            "ShippingPrice" : 0,
            "Quantity" : 0
        }, 
        {
            "ProductId" : "504",
            "Price" : 0,
            "ShippingPrice" : 0,
            "Quantity" : 0
        }, 
        {
            "ProductId" : "504",
            "Price" : 0,
            "ShippingPrice" : 0,
            "Quantity" : 0
        }
    ]
}

我尝试的投影(使用C#)是

ProjectionDefinition<Cart, Cart> projectionDefinition = Builders<Cart>.Projection.Include(doc => doc.CartItems[0].ProductId)                                                                                      .Exclude(doc => doc.Id);

但结果是CartItems数组包含所有默认值(包括ProductId)。我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据文档:

  

使用点号表示嵌入字段

https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/#return-specific-fields-in-embedded-documents

所以您的投影应如下所示:

Builders<Cart>.Projection
.Include("CartItems.ProductId")
.Exclude(doc => doc.Id);