2017년 1월 6일 금요일

Document CRUD - Update

Tags

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

:)
:(
hihi
:-)
:D
=D
:-d
;(
;-(
@-)
:o
:>)
(o)
:p
:-?
(p)
:-s
8-)
:-t
:-b
b-(
(y)
x-)
(h)