örnek işlevi in-place
diğer veritabanlarında "yerinde" güncellemeler ile aynı değildir. CouchDB hala sadece bir ek mimariyi kullanır; Belge güncelleme işleyicileri hala
Yine güncelleme işleyicileri oldukça kullanışlı ve öğrenme değer, vb yeni doc inceleme oluşturmak.
Akümülatörlü bir belgeye sahip olduğunuzu varsayalım. değerini bir amount
parametresi kullanarak belirterek bir belgede bir tamsayıyı tek bir HTTP sorgusuyla biriktirmek istiyorsunuz. Aşağıdaki komutları düşünün:
curl -X PUT http://localhost:5984/db
# Returns {"ok":true}
curl -H "Content-Type:application/json" -X POST http://localhost:5984/db/_bulk_docs -d @-
{"docs":
[
{"_id": "my_doc", "number": 23},
{"_id": "_design/app",
"updates": {
"accumulate": "function (doc, req) {
var inc_amount = parseInt(req.query.amount);
doc.number = doc.number + inc_amount;
return [doc, \"I incremented \" +
doc._id + \" by \" +
inc_amount];
}"
}
}
]
}
# Returns [{"id":"my_doc","rev":"1-8c9c19a45a7e2dac735005bbe301eb15"},
# {"id":"_design/app","rev":"1-83ec85978d1ed32ee741ce767c83d06e"}]
(POST JSON nesnesi sonra, ^, sonu dosyaya D basmayı unutmayın.)
Sonraki birikim için belgeyi onaylamak (my_doc
) var:
curl http://localhost:5984/db/my_doc
# Returns {"_id":"my_doc","_rev":"1-8c9c19a45a7e2dac735005bbe301eb15",
# "number":23}
Artık bir amount
parametre güncelleme için alanıyla accumulate
güncelleme işleyicisi çağırabilirsiniz.
curl -X PUT \
http://localhost:5984/db/_design/app/_update/accumulate/my_doc?amount=15
# Returns: I incremented my_doc by 15
curl http://localhost:5984/db/my_doc
# Returns {"_id":"my_doc","_rev":"2-<whatever>",
# "number":38}
Bildirimi yeni number
değeri 38 olduğu, 23 + 15
_rev değer artışlarını başarılı ve yol olamazdı. –
Kim, sabit. Teşekkürler. – JasonSmith