如何使用 Mongo 命令 "patch" DocumentDB 中的文档
How to "patch" a Document in DocumentDB using Mongo commands
我的代码如下:
MyModel requestID = new MyModel
{
"id" = "123"
};
MyModel toUpdate = new MyModel
{
"is_cancelled" : true
};
FilterDefinition<MyModel> filter = requestID.ToBsonDocument();
UpdateDefinition<MyModel> update = toUpdate.ToBsonDocument();
collection.FindOneAndUpdate(filter, update);
例如,我在 DocumentDB 中的 1 个文档是:
{
"id": "123",
"delnum": "100001"
}
我的 toUpdate 是:
{
"is_cancelled" : true
}
我在 FindOneAndUpdate 之后的预期文档是:
{
"id": "123",
"delnum": "100001",
"is_cancelled" : true
}
但实际情况是,它将我的文档替换为以下 id=123:
{
"is_cancelled" : true
}
我想知道我是不是做错了,或者我的预期结果不正确。
编辑代码:
MyModel requestID = new MyModel
{
"id" = "123"
};
MyModel toUpdate = new MyModel
{
"is_cancelled" : true
};
var builder = Builders<MyModel>.Update;
UpdateDefinition<MyModel> update =null;
toUpdate.GetType().GetProperties().ToList().ForEach(
x => update = builder.Set(x.Name, x.GetValue(toUpdate, null))
FilterDefinition<MyModel> filter = requestID.ToBsonDocument();
if (update == null) return;
collection.FindOneAndUpdate(filter, update);
编辑:
下面的代码对我有用。
var filterData = Builders<MyModel>.Filter.Eq("id", "123"); //requestID
var updateData = new BsonDocumentUpdateDefinition<MyModel>(new BsonDocument("$set", toUpdate));
await collection.FindOneAndUpdateAsync(filter, updateData , new FindOneAndUpdateOptions<MyModel>() { IsUpsert = false });
您没有指定要更新的内容。
Mongo 期望 json 看起来像这样:
{
"$set" : {
"is_cancelled" : true
}
}
您可以使用更新生成器来简化此操作:
var builder = Builders<MyModel>.Update;
var update = builder.Set("is_cancelled", true);
您还可以在构建器上链接多个 Set
方法:
var update = builder.Set("a", 1).Set("b", 2);
我的代码如下:
MyModel requestID = new MyModel
{
"id" = "123"
};
MyModel toUpdate = new MyModel
{
"is_cancelled" : true
};
FilterDefinition<MyModel> filter = requestID.ToBsonDocument();
UpdateDefinition<MyModel> update = toUpdate.ToBsonDocument();
collection.FindOneAndUpdate(filter, update);
例如,我在 DocumentDB 中的 1 个文档是:
{
"id": "123",
"delnum": "100001"
}
我的 toUpdate 是:
{
"is_cancelled" : true
}
我在 FindOneAndUpdate 之后的预期文档是:
{
"id": "123",
"delnum": "100001",
"is_cancelled" : true
}
但实际情况是,它将我的文档替换为以下 id=123:
{
"is_cancelled" : true
}
我想知道我是不是做错了,或者我的预期结果不正确。
编辑代码:
MyModel requestID = new MyModel
{
"id" = "123"
};
MyModel toUpdate = new MyModel
{
"is_cancelled" : true
};
var builder = Builders<MyModel>.Update;
UpdateDefinition<MyModel> update =null;
toUpdate.GetType().GetProperties().ToList().ForEach(
x => update = builder.Set(x.Name, x.GetValue(toUpdate, null))
FilterDefinition<MyModel> filter = requestID.ToBsonDocument();
if (update == null) return;
collection.FindOneAndUpdate(filter, update);
编辑: 下面的代码对我有用。
var filterData = Builders<MyModel>.Filter.Eq("id", "123"); //requestID
var updateData = new BsonDocumentUpdateDefinition<MyModel>(new BsonDocument("$set", toUpdate));
await collection.FindOneAndUpdateAsync(filter, updateData , new FindOneAndUpdateOptions<MyModel>() { IsUpsert = false });
您没有指定要更新的内容。
Mongo 期望 json 看起来像这样:
{
"$set" : {
"is_cancelled" : true
}
}
您可以使用更新生成器来简化此操作:
var builder = Builders<MyModel>.Update;
var update = builder.Set("is_cancelled", true);
您还可以在构建器上链接多个 Set
方法:
var update = builder.Set("a", 1).Set("b", 2);