복붙노트

[MONGODB] 몽구스 삭제 (풀) 배열 내의 문서는 OBJECTID 작동하지 않는다

MONGODB

몽구스 삭제 (풀) 배열 내의 문서는 OBJECTID 작동하지 않는다

나는 다음과 같은 몽구스 스키마를 가지고 :

user = {
    "userId" : "myId",
    "connections":
    [{
        "dateConnectedUnix": 1334567891,
        "isActive": true
    }, {
        "dateConnectedUnix": 1334567893,
        "isActive": false
    }]
}

나는 다음을 얻기 위해, 연결 배열의 두 번째 항목을 삭제하려면 :

user = {
    "userId" : "myId",
    "connections": 
    [{
        "dateConnectedUnix": 1334567893,
        "isActive": false
    }]
}

다음 코드는 예상대로 일을한다 :

userAccounts.update({'connections.isActive': false }, 
                    {$pull: { 'connections.isActive':false }}, 
                    function (err,val) {
                        console.log(val)
                    });

그러나, 나는 ObjectId가에 따라 삭제해야합니다. 그리고 다음은 작동하지 않습니다 간다 :

userAccounts.update({'connections._id': '1234-someId-6789' }, 
                    {$pull: { 'connections._id': '1234-someId-6789' }}, 
                    function (err,val) {
                        console.log(val)
                    });

어떤 제안? (구글, 유래, ... 일명) 시간과 더 운이 없었다 나는 화면에 내 머리를 두드리는있다.

해결법

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

    1.위의 코드는 작동하지 않을 것 같다. 그것은 심지어 내가 준 첫 번째 예를 들어 일을하지 말았어야.

    위의 코드는 작동하지 않을 것 같다. 그것은 심지어 내가 준 첫 번째 예를 들어 일을하지 말았어야.

    MongoDB를, 제거 개체 배열 : 결국 여기이 대답에 의해 지원되었다

    여기 내 작업 코드는 다음과 같습니다

    userAccounts.update( 
          { userId: usr.userId },
          { $pull: { connections : { _id : connId } } },
          { safe: true },
          function removeConnectionsCB(err, obj) {
              ...
          });
    
  2. ==============================

    2.나는 문서 등이있다

    나는 문서 등이있다

    나는 주소 배열에서 삭제 주소로이

    인터넷에 많이 검색 한 후 나는 해결책을 발견

     Customer.findOneAndUpdate(query, {$pull: {address: addressId}}, function(err, data){
            if(err) {
              return res.status(500).json({'error' : 'error in deleting address'});
            }
    
            res.json(data);
    
          });
    
  3. ==============================

    3.ObjectId가 함께 업데이트를 사용하려면 대신 문자열 표현의 ObjectId가 객체를 사용한다 :

    ObjectId가 함께 업데이트를 사용하려면 대신 문자열 표현의 ObjectId가 객체를 사용한다 :

    var ObjectId = require('mongoose').Types.ObjectId;
    
    userAccounts.update({'connections._id': new ObjectId('1234-someId-6789') }, 
                    {$pull: { 'connections._id': new ObjectId('1234-someId-6789') }}, 
                    function (err,val) {
                        console.log(val)
                    });
    
  4. ==============================

    4.

    user: {
     _id: ObjectId('5ccf3fa47a8f8b12b0dce204'),
     name: 'Test',
     posts: [
      ObjectId("5cd07ee05c08f51af8d23b64"),
      ObjectId("5cd07ee05c08f51af8d23c52")
     ]
    }
    

    게시물 배열에서 하나의 게시물을 삭제

    user.posts.pull ( "5cd07ee05c08f51af8d23b64");  () user.save;

  5. ==============================

    5.몽구스 : 4.11.11를 무엇 나를 위해 일한하면 다음과 같은 구문입니다 :

    몽구스 : 4.11.11를 무엇 나를 위해 일한하면 다음과 같은 구문입니다 :

    const removeTansactionFromUser = (userId, connectionId) => {
        return User.findByIdAndUpdate(userId, { $pull: { "connections": connectionId} }, {'new': true} );
    };
    

    문자열 형식 또는 ObjectId가 형식 몽구스 지원 ID입니다. 팁 : 새로운 ObjectId가가 (stringId) 문자열에서 ObjectId가로 전환

  6. ==============================

    6.당신은 몽구스 5.4.x에서 할 수 있습니다

    당신은 몽구스 5.4.x에서 할 수 있습니다

    const result = await User.findByIdAndUpdate(user_id,
                {
                    $pull: {
                        connections: { _id: con_id }
                    }
                }, { new: true });
    
    
    if (result)
        console.log(result)
    

    연결 배열로부터 항목을 제거 제공 _id 속성 값에 기초 할 것이다

  7. from https://stackoverflow.com/questions/19786075/mongoose-deleting-pull-a-document-within-an-array-does-not-work-with-objectid by cc-by-sa and MIT license