首页 > 解决方案 > 更新字段不存在的 MongoDB 集合

问题描述

我想更新集合中不包含特定字段的每条记录。

以下查询使用 Mongo shell,但我正在努力使用 .Net 中的 mongoDB.Driver 编写它。

db.Comments.update(
    { MemberRoleType: { $exists: false }},
    { $set: { MemberRoleType: 4 },
    { multi: true }
)

我尝试了各种方法,例如以下但无法达到我正在寻找的结果:

await comments.UpdateManyAsync(c => c.MemberRoleType == 0, Builders<Comment>.Update.Set(x => x.MemberRoleType, ContentRoleType.Online)));

标签: c#mongodbmongodb-.net-driver

解决方案


我相信你正在寻找的存在

Builders<Comments>.Filter.Exists(x => x.MemberRoleType, false);

你应该可以像这样使用它

var filter = Builders<Comments>.Filter.Exists(x => x.MemberRoleType, false);
await comments.UpdateManyAsync(filter, Builders<Comment>.Update.Set(x => x.MemberRoleType, ContentRoleType.Online)));

进而生成此查询

{
        "q": {
            "MemberRoleType": {
                "$exists": false
            }
        },
        "u": {
            "$set": {
                "MemberRoleType": 4
            }
        },
        "multi": true
}

推荐阅读