使用C#MongoDB驱动程序的嵌套数组$ pull查询

时间:2015-10-07 15:01:54

标签: c# mongodb shell

我有以下查询在预期的mongo shell上工作。

db.getCollection('personnels').update(
    {
        _id: ObjectId("55f6728b9d73a15807885de8"), 
        "Devices._id":ObjectId("55fa5f7ac9e7863a3836e331")
    }, 
    {
        $pull:{ "Devices.$.DeviceCloudFolders": { "CloudFolderId": ObjectId("5615124b06275f072040c4f1")}}
    }
);

这是我的文档结构:

{
    "_id" : ObjectId("55f6728b9d73a15807885de8"),
    "FirstName" : "Tolga",
    "Devices" : [ 
        {
            "_id" : ObjectId("55fa5f7ac9e7863a3836e331"),
            "Name" : "tolga-laptop",
            "DeviceCloudFolders" : [{
                "AuthorityType" : 1,
                "CloudFolderId" : ObjectId("55f96db5c9e7863a3836e310"),
                "Status" : 1
            }],
            "Status" : 1
        }
    ],
    "Status" : 1
}

我需要在C#中使用它并且无法弄清楚如何使用它。

我从这些界线开始:

var filter = Builders<Personnel>.Filter.And(
                 Builders<Personnel>.Filter.Eq("_id", ownerPersonnelId),
                 Builders<Personnel>.Filter.Eq("Devices._id", _id));

var update = Builders<Personnel>.Update.PullFilter("Devices.$.DeviceCloudFolders", /*couldn't figure out what goes here*/))

Personnels.FindOneAndUpdateAsync(filter, update);

1 个答案:

答案 0 :(得分:7)

我不确定,但您可以尝试使用它:

var update = Builders<Personnel>.Update.PullFilter(
    "Devices.$.DeviceCloudFolders", 
    Builders<DeviceCloudFolder>.Filter.Eq("CloudFolderId", _cloudFolderId));