Replace
collection.replace(selector, data)
이미 있는 document를 찾아서 수정한다. selector에 의해서 document를 선택하는데, selector는 object여야 하며, _id나 _key를 포함해야 한다. 그리고 이 _id나 _key값이 collection에 존재하는 값이어야 한다. 선택된 document는 두 번째 인자인 data로 교체된다. data의 _id, _key, _rev값은 모두 무시된다.
replace 메소드 호출 이후, _id, _key, _rev, _oldRev 를 포함한 document가 리턴된다. _oldRev는 replace 이전 _rev값이다.
만약 selector에 _rev 값이 명시된다면, _id, _key값으로 검색된 document의 현재 _rev값을 체크해서 만약 다르다면 충돌이 발생하고, 에러를 던지게 된다.
collection.replace(selector, data, options)
As before, but options must be an object that can contain the following boolean attributes:
위와 같이 옵션을 줄 수도 있다. option은 object여야 하며 아래 옵션이 있다.
- waitForSync
- overwrite: true이면, selector의 _rev값이 무시되어 revision이 다르더라도 덮어씌운다.
- returnNew: true이면 replace 된 document를 리턴한다.
- returnOld: true이면 replace 후 이전 document를 리턴한다.
- silent: true이면 아무 값도 리턴하지 않는다.
collection.replace(document-handle, data)
collection.replace(document-handle, data, options)
selector 대신 _id로 검색할 수 있다.
collection.replace(document-key, data)
collection.replace(document-key, data, options)
selector 대신 _key로 검색할 수 있다.
collection.replace(selectorarray, dataarray)
collection.replace(selectorarray, dataarray, options)
selector 배열을 통해 한꺼번에 replace할 수 있다. selectorarray와 dataarray의 길이는 반드시 같아야 한다.
Examples
Create and update a document:
arangosh> a1 = db.example.insert({ a : 1 });
{
"_id" : "example/14903",
"_key" : "14903",
"_rev" : "_USnzqcO---"
}
arangosh> a2 = db.example.replace(a1, { a : 2 });
{
"_id" : "example/14903",
"_key" : "14903",
"_rev" : "_USnzqcS---",
"_oldRev" : "_USnzqcO---"
}
arangosh> a3 = db.example.replace(a1, { a : 3 });
[ArangoError 1200: precondition failed]
Use a document handle:
arangosh> a1 = db.example.insert({ a : 1 });
{
"_id" : "example/14916",
"_key" : "14916",
"_rev" : "_USnzqfO--_"
}
arangosh> a2 = db.example.replace("example/3903044", { a : 2 });
{
"_id" : "example/3903044",
"_key" : "3903044",
"_rev" : "_USnzqfS---",
"_oldRev" : "_USnzqfO---"
}
Update
collection.update(selector, data)
Replace와 동일하게 동작하지만, replace는 문서 전체를 갈아끼우고 update는 부분적으로 수정한다.collection.update(selector, data, options)
Replace와 동일하게 동작하지만, replace는 문서 전체를 갈아끼우고 update는 부분적으로 수정한다. 몇 가지 옵션이 더 있다.
- waitForSync:
- overwrite:
- returnNew:
- returnOld:
- silent:
- keepNull: false일 경우, data의 속성 값이 null인 것은 모두 제거된다.
- mergeObjects: false일 경우 replace와 같다.
collection.update(document-handle, data)
collection.update(document-handle, data, options)
collection.update(document-key, data)
collection.update(document-key, data, options)
collection.update(selectorarray, dataarray)
collection.update(selectorarray, dataarray, options)
Replace와 동일하게 동작하지만, replace는 문서 전체를 갈아끼우고 update는 부분적으로 수정한다.
Examples
Create and update a document:
arangosh> a1 = db.example.insert({"a" : 1});
{
"_id" : "example/14984",
"_key" : "14984",
"_rev" : "_USnzqre---"
}
arangosh> a2 = db.example.update(a1, {"b" : 2, "c" : 3});
{
"_id" : "example/14984",
"_key" : "14984",
"_rev" : "_USnzqri---",
"_oldRev" : "_USnzqre---"
}
arangosh> a3 = db.example.update(a1, {"d" : 4});
[ArangoError 1200: precondition failed]
arangosh> a4 = db.example.update(a2, {"e" : 5, "f" : 6 });
{
"_id" : "example/14984",
"_key" : "14984",
"_rev" : "_USnzqrm---",
"_oldRev" : "_USnzqri---"
}
arangosh> db.example.document(a4);
{
"_key" : "14984",
"_id" : "example/14984",
"_rev" : "_USnzqrm---",
"a" : 1,
"b" : 2,
"c" : 3,
"f" : 6,
"e" : 5
}
arangosh> a5 = db.example.update(a4, {"a" : 1, c : 9, e : 42 });
{
"_id" : "example/14984",
"_key" : "14984",
"_rev" : "_USnzqrm--_",
"_oldRev" : "_USnzqrm---"
}
arangosh> db.example.document(a5);
{
"_key" : "14984",
"_id" : "example/14984",
"_rev" : "_USnzqrm--_",
"a" : 1,
"b" : 2,
"c" : 9,
"e" : 42,
"f" : 6
}
Use a document handle:
arangosh> a1 = db.example.insert({"a" : 1});
{
"_id" : "example/15036",
"_key" : "15036",
"_rev" : "_USnzqzG--_"
}
arangosh> a2 = db.example.update("example/18612115", { "x" : 1, "y" : 2 });
{
"_id" : "example/18612115",
"_key" : "18612115",
"_rev" : "_USnzqzK---",
"_oldRev" : "_USnzqzG---"
}
Use the keepNull parameter to remove attributes with null values:
arangosh> db.example.insert({"a" : 1});
{
"_id" : "example/15018",
"_key" : "15018",
"_rev" : "_USnzqwq--_"
}
arangosh> db.example.update("example/19988371",
........> { "b" : null, "c" : null, "d" : 3 });
{
"_id" : "example/19988371",
"_key" : "19988371",
"_rev" : "_USnzqwu---",
"_oldRev" : "_USnzqwq---"
}
arangosh> db.example.document("example/19988371");
{
"_key" : "19988371",
"_id" : "example/19988371",
"_rev" : "_USnzqwu---",
"d" : 3,
"c" : null,
"b" : null
}
arangosh> db.example.update("example/19988371", { "a" : null }, false, false);
{
"_id" : "example/19988371",
"_key" : "19988371",
"_rev" : "_USnzqwu--_",
"_oldRev" : "_USnzqwu---"
}
arangosh> db.example.document("example/19988371");
{
"_key" : "19988371",
"_id" : "example/19988371",
"_rev" : "_USnzqwu--_",
"b" : null,
"c" : null,
"d" : 3
}
arangosh> db.example.update("example/19988371",
........> { "b" : null, "c": null, "d" : null }, false, false);
{
"_id" : "example/19988371",
"_key" : "19988371",
"_rev" : "_USnzqwy---",
"_oldRev" : "_USnzqwu--_"
}
arangosh> db.example.document("example/19988371");
{
"_key" : "19988371",
"_id" : "example/19988371",
"_rev" : "_USnzqwy---"
}
Patching array values:
arangosh> db.example.insert({"a" : { "one" : 1, "two" : 2, "three" : 3 },
........> "b" : { }});
{
"_id" : "example/15003",
"_key" : "15003",
"_rev" : "_USnzquW---"
}
arangosh> db.example.update("example/20774803", {"a" : { "four" : 4 },
........> "b" : { "b1" : 1 }});
{
"_id" : "example/20774803",
"_key" : "20774803",
"_rev" : "_USnzquW--_",
"_oldRev" : "_USnzquS---"
}
arangosh> db.example.document("example/20774803");
{
"_key" : "20774803",
"_id" : "example/20774803",
"_rev" : "_USnzquW--_",
"b" : {
"b1" : 1
},
"a" : {
"four" : 4
}
}
arangosh> db.example.update("example/20774803", { "a" : { "one" : null },
........> "b" : null },
........> false, false);
{
"_id" : "example/20774803",
"_key" : "20774803",
"_rev" : "_USnzqua---",
"_oldRev" : "_USnzquW--_"
}
arangosh> db.example.document("example/20774803");
{
"_key" : "20774803",
"_id" : "example/20774803",
"_rev" : "_USnzqua---",
"a" : {
"four" : 4
}
}
Replace By Example
collection.replaceByExample(example, newValue)
example에 해당하는 모든 문서를 newValue로 값을 바꾼다. 그러나 _id, _key, _rev값은 newValue의 값으로 바뀌지 않는다.
collection.replaceByExample(example, newValue, waitForSync)
waitForSync 옵션을 줄 수 있다.
collection.replaceByExample(example, newValue, waitForSync, limit)
replace 되는 document의 개수를 제한할 수 있다. 검색된 document의 개수보다 limit이 적을 경우, 어떤 document가 수정되고, 어떤 document가 안될지는 알 수 없다.
Examples
arangosh> db.example.save({ Hello : "world" });
{
"_id" : "example/6586",
"_key" : "6586",
"_rev" : "_USnx7om---"
}
arangosh> db.example.replaceByExample({ Hello: "world" }, {Hello: "mars"}, false, 5);
1
Update By Example
collection.updateByExample(example, newValue)
collection.updateByExample(document, newValue, keepNull, waitForSync)
collection.updateByExample(document, newValue, keepNull, waitForSync, limit)
collection.updateByExample(document, newValue, options)
- keepNull
- waitForSync
- limit
- mergeObjects
Examples
arangosh> db.example.save({ Hello : "world", foo : "bar" });
{
"_id" : "example/6598",
"_key" : "6598",
"_rev" : "_USnx7rC---"
}
arangosh> db.example.updateByExample({ Hello: "world" }, { Hello: "foo", World: "bar" }, false);
1
arangosh> db.example.byExample({ Hello: "foo" }).toArray()
[
{
"_key" : "6598",
"_id" : "example/6598",
"_rev" : "_USnx7rG---",
"Hello" : "foo",
"foo" : "bar",
"World" : "bar"
}
]
EmoticonEmoticon