문서에 저장된 배열 밖으로 요소를 가져와 검색하려고합니다. POPed 요소를 반환하지 않기 때문에 $ pop을 사용할 수 없습니다. 대신 findAndModify()를 사용하려고합니다. 그것은 셸 콘솔에서 작동하지만 mongodb node.js 드라이버 (https://www.npmjs.org/package/mongodb)를 사용하여 문제가 발생합니다.Node.js 드라이버 "mongodb"findAndModify() 구현 - 필드를 지정하는 방법?
내 문서 구조는 그래서 다음과 같습니다 몽고 쉘에서
{ _id: '1', queue: [1,2,3]}
, 내가 할 :
> db.collection.findAndModify({ query: { _id: 1 },
update: { $pop: { queue: -1 } },
fields: { queue: { $slice: 1 } }, new: false })
$ 슬라이스가 돌아 문서는 단지 poped 된 요소를 보여줍니다 보장합니다. 명확히하기 위해, 나는 큐에있는 것에 관심이 없다. 단지 내가 큐에서 방금 튀어 나온 것에 관심이있다.
반환 :
< {_id: 1, "queue": [1]} // yes, it works!
MongoDB의 라이브러리를 사용하여, 나는이 $ 슬라이스 지정하는 방법을 모르는 : 1, 옵션에서 지원하지 않는 것 (?) :
> db.collection('collection').findAndModify(
{ _id: 1 },
[],
{ $pop: { queue: -1 }, queue: { $slice: 1 } },
{ new: false },
function(error, results) {
if(error) {
console.log(error);
}
console.log(results);
}
);
반환 : 기본적으로
< MongoError: exception: Field name duplication not allowed with modifiers
- 나는 "큐 : {$ 슬라이스 : 1}"넣어해야 nodejs에 참여는 할 쿼리 이 일? node.js 드라이버 구현에서도 지원됩니까?
또한 findAndModify()는이 방법으로 사용하기위한 것 같지 않습니다. $ pop이 POPed 값을 반환하면 이상적입니다. 이 작업을 수행하는 방법에 대한 제안 사항은 무엇입니까?
감사합니다, - 사미르