복붙노트

[MONGODB] MongoDB를 가진 배열에서 특정 항목을 삭제

MONGODB

MongoDB를 가진 배열에서 특정 항목을 삭제

나는 CodeIgniter의 및 MongoDB를을 사용하여 웹 응용 프로그램을 개발하고있다. 사용자가 파일을 업로드 할 수 있으며 다른 사용자가 그들에 댓글을 달 수 있습니다.

나는 주 파일 문서에 주석라는 배열에 주석을 저장합니다. 이것은 모든 괜찮지 만 내가 어떻게 배열에서 특정 주석을 제거 할 수 있습니까?

사용자가 여러 주석을 추가 할 수 있기 때문에 나는 키로 ID를 사용할 수 없습니다. 어떻게 것 당신은 내가 할 수있는 것이 좋습니다?

이것은 내 댓글 배열입니다 :

"comments": [
        {
            "user_id": ObjectId("4f240b433dc7937d68030000"),
            "user_name": "james",
            "user_comment": "This is a comment",
            "created_at": "2012-01-2821: 20: 44"
        },
        {
            "user_id": ObjectId("4f240b433dc7937d68030000"),
            "user_name": "mandy",
            "user_comment": "This is another comment",
            "created_at": "2012-01-2821: 31: 07"
        }
    ],

해결법

  1. ==============================

    1.당신은 사용자 ID, 이름이나 설명을 일치시켜 주석 항목을 식별 할 수있는 경우 - 당신은 적절한 조건과 함께 $ 풀 수정 자와 그 코멘트를 사용하여 업데이트 () 명령을 제거 할 수 있습니다.

    당신은 사용자 ID, 이름이나 설명을 일치시켜 주석 항목을 식별 할 수있는 경우 - 당신은 적절한 조건과 함께 $ 풀 수정 자와 그 코멘트를 사용하여 업데이트 () 명령을 제거 할 수 있습니다.

    위와 같이 할 수없는 경우 (UUID 같은) 주석의 고유 ID를 포함한다.

    주석을 삭제하려면 다음을 수행 :

    db.coll.update({<cond to identify document}, {$pull: {'comments': {'name': <name>}}} )
    

    당신이 바람직하다 ID를 사용하는 경우 :

    db.coll.update({<cond to identify document}, {$pull: {'comments': {'id': <id>}}} )
    
  2. ==============================

    2.시간이 고유로 어쩌면 당신은 그 'created_at'시간 주석을 제거 할 수 있습니다.

    시간이 고유로 어쩌면 당신은 그 'created_at'시간 주석을 제거 할 수 있습니다.

    $db.coll.update({cond to identify document},{$pull:{'comments':{'created_at':<>}}})
    
  3. ==============================

    3.난 당신이 때 삽입 각 주석에 MongoDB의 ID를 추가 가지고 생각합니다. 이 같은 새로운 MongoDB의 ID를 만들 수 있습니다;

    난 당신이 때 삽입 각 주석에 MongoDB의 ID를 추가 가지고 생각합니다. 이 같은 새로운 MongoDB의 ID를 만들 수 있습니다;

    $comment_id = new MongoID();
    

    지금, 당신은 $ 풀 + @ smoorthy의 대답처럼 $ 업데이트의 ID로 의견을 삭제할 수 있습니다.

  4. from https://stackoverflow.com/questions/9048424/removing-specific-items-from-array-with-mongodb by cc-by-sa and MIT license