IT

당신은 append 대신 mongo $push prepend를 가질 수 있습니까?

itgroup 2023. 5. 13. 09:27
반응형

당신은 append 대신 mongo $push prepend를 가질 수 있습니까?

mongo $push를 할 때 끝에 추가하는 것보다 세트 시작 부분에 push add를 하고 싶습니다.

요소를 마지막이 아닌 첫 번째로 추가하는 아토믹 푸시 업데이트가 가능합니까?


2014년 업데이트: 네, 할 수 있습니다.

MongoDB v2.5.3 이후에는 새로운 버전이 있습니다.$position연산자를 함께 포함할 수 있습니다.$each당신의 일부로서의 연산자.$push배열에서 값을 삽입할 위치를 지정하는 쿼리입니다.

다음은 docs 페이지에서 배열 인덱스 2::에 요소 20과 30을 추가하는 예제입니다.

db.students.update( { _id: 1 },
                    { $push: { scores: {
                                         $each: [ 20, 30 ],
                                         $position: 2
                                       }
                             }
                    }
                  )

참조: http://docs.mongodb.org/master/reference/operator/update/position/ #up._S_position

mongo v2.2에서 테스트한 $set for prepend와 함께 음수 인덱스 사용:

> db.test.insert({'array': [4, 5, 6]})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"),
  "array" : [ 4, 5, 6 ] }

//prepend 3
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")}, 
                 {'$set': {'array.-1':     3}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"), 
  "array" : [ 3, 4, 5, 6 ] }

//prepend 2
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")}, 
                 {'$set': {'array.-1':     2}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"), 
  "array" : [ 2, 3, 4, 5, 6 ] }

//prepend 1
> db.test.update({"_id" : ObjectId("513ad0f8afdfe1e6736e49eb")}, 
                 {'$set': {'array.-1':     1}})
> db.test.find()
{ "_id" : ObjectId("513ad0f8afdfe1e6736e49eb"), 
  "array" : [ 1, 2, 3, 4, 5, 6 ] }

며칠 전에도 비슷한 질문이 있었습니다.유감스럽게도 간단한 대답은 "아니오"이지만 이 기능에 대한 공개 요청이 있습니다.
https://jira.mongodb.org/browse/SERVER-2191 - "어레이 전면에 $1800 추가"

다른 스레드에는 "MongoDB 어레이를 스택으로 사용" - MongoDB 어레이를 스택으로 사용"이라는 몇 가지 정보와 해결 방법이 있습니다.

위의 내용이 유용하고 허용 가능한 해결 방법을 찾는 데 도움이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/10131957/can-you-have-mongo-push-prepend-instead-of-append

반응형