更新 MongoDB 字段不存在的集合
Update MongoDB collection where field doesn't exist
我想更新集合中不包含特定字段的每条记录。
以下查询使用 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)));
我相信你正在寻找 exists
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
}
我想更新集合中不包含特定字段的每条记录。
以下查询使用 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)));
我相信你正在寻找 exists
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
}