我是Cosmos Db的新手,想了解如何在文档集中删除/ upsert子文档。
如果我有一份文件:
{
"Id": "1234",
"Name": "foo",
"Items": [
{
"Id": "abcd",
"Age": 35,
"Claims": [
{
"Name": "email",
"Value": "foo@bar.com"
}
]
}
]
}
我如何:
1)将一个项目添加到文档中的项目列表中。
2)从项目列表中删除现有项目
3)将项目上传到文档中的项目列表
4)向项目列表中的现有项目添加/删除索赔值?
提前致谢。
答案 0 :(得分:3)
目前没有办法检索修改和更新文档。
但是,User voice feature request
已于2018年3月5日更新:
答案 1 :(得分:3)
正如@Sajeetharan所说,azure cosmos db现在不支持partial updates
。看起来该团队正积极致力于此功能。现在,您可以在stored procedure
。
以下示例代码供参考:
function updateSproc(id, update) {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var response = getContext().getResponse();
tryQueryAndUpdate();
function tryQueryAndUpdate(continuation) {
var query = {query: "select * from root r where r.id = @id", parameters: [{name: "@id", value: id}]};
var requestOptions = {continuation: continuation};
var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, documents, responseOptions) {
if (err) throw err;
if (documents.length > 0) {
tryUpdate(documents[0]);
} else {
throw new Error("Document not found.");
}
});
}
function tryUpdate(document) {
var requestOptions = {etag: document._etag};
var fields, i;
fields = Object.keys(update);
for (i = 0; i < fields.length; i++) {
document[fields[i]] = update[fields[i]];
}
var isAccepted = collection.replaceDocument(document._self, document, requestOptions, function (err, updatedDocument, responseOptions) {
if (err) throw err;
response.setBody(updatedDocument);
});
}
但是,Azure Cosmos DB支持MongoDB protocol
。您可以在Azure official page确认支持的功能。
因此,支持incremental operations
。请参阅此link。
希望它对你有所帮助。任何关注,请随时告诉我。