首页 > 解决方案 > MongoDB .NET Core:使用 BulkWrite 找不到数组过滤器

问题描述

我正在尝试使用带有 mongodb c# 驱动程序的 BulkWrite 执行许多更新。我有以下代码。我收到错误“在路径 'PartialTemplates.$[template]._id' 中找不到标识符 'template' 的数组过滤器”

        var collection = data.Database.GetCollection<BsonDocument>("TemplateCollection");
        var filter1 = Builders<BsonDocument>.Filter.In("_id", _ids1);
        var filter2 = Builders<BsonDocument>.Filter.In("_id", _ids2);
        var filter3 = Builders<BsonDocument>.Filter.In("_id", _ids3);

        var id1Update = Builders<BsonDocument>.Update
            .Set("PartialTemplates.$[template]._id", _id1);
        var id2Update = Builders<BsonDocument>.Update
            .Set("PartialTemplates.$[template]._id", _id2);
        var id3Update = Builders<BsonDocument>.Update
            .Set("PartialTemplates.$[template]._id", _id3);

        var arrayFilters = new List<ArrayFilterDefinition>
        {
            new BsonDocumentArrayFilterDefinition<BsonDocument>(new BsonDocument("template.Type.Key", "TemplateType")),
        };

        var updateManies = new List<UpdateManyModel<BsonDocument>>
        {
            new UpdateManyModel<BsonDocument>(filter1, id1Update)
            {
                ArrayFilters = arrayFilters
            },
            new UpdateManyModel<BsonDocument>(filter2, id2Update)
            {
                ArrayFilters = arrayFilters
            },
            new UpdateManyModel<BsonDocument>(filter3, id3Update)
            {
                ArrayFilters = arrayFilters
            }
        };

        var result = await collection.BulkWriteAsync(updateManies);

其中一份文件看起来像这样

            new BsonDocument
            {
                ["_id"] = Guid.Parse("6da07681-bd40-4fad-8c69-221e186ee6ae"),
                ["PartialTemplates"] = new BsonArray
                {
                    new BsonDocument
                    {
                        ["_id"] = Guid.Parse("0fcb486b-2b30-481e-b44f-388481a9efe1"),
                        ["Type"] = new BsonDocument
                        {
                            ["Key"] = "TemplateType"
                        }
                    },
                    new BsonDocument
                    {
                        ["_id"] = Guid.Parse("0fcb486b-2b30-481e-b44f-388481a9efe1"),
                        ["Type"] = new BsonDocument
                        {
                            ["Key"] = "WrongKey"
                        }
                    }
                }
            }

为什么这不起作用?

标签: c#.netmongodb.net-core

解决方案


推荐阅读