Cosmos Dbを初めて使用し、ドキュメントコレクション内のサブドキュメントを削除/アップサートする方法を理解したいと思います。
私が文書を持っている場合:
{ "Id": "1234", "Name": "foo", "Items": [ { "Id": "abcd", "Age": 35, "Claims": [ { "Name": "email", "Value": "[email protected]" } ] } ] }
どうすればよいですか:
1)ドキュメントのアイテムリストにアイテムを追加します。
2)アイテムリストから既存のアイテムを削除します
3)ドキュメントのアイテムリストにアイテムをアップサートします
4)アイテムリストの既存のアイテムにクレーム値を追加/削除しますか?
前もって感謝します。
@Sajeetharanが言ったように、Azure cosmosdbは現在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 CosmosDBはMongoDB protocol
をサポートしています。サポートされている機能は Azure公式ページ で確認できます。
したがって、incremental operations
がサポートされます。これを参照してください リンク 。
お役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。
現在、変更を行ってドキュメントを取得して更新する以外に方法はありません。
ただし、 User voice feature request
2018年3月5日に更新されました: