2017-02-11 2 views
0

저는 MongoDB와 mongoose를 처음 사용합니다. 그들이하며 ObjectObjectId가있는 Doc - 값이 있으면 값을 밀어 넣고, 그렇지 않으면 제거하십시오

의 배열입니다 사이

그래서 나의 모델은, 많은 분야를 보유하고
var modelSchema = new Schema({ 
    //... 
    inner_array: [Schema.Types.ObjectId], 
    //... 
}); 

내가 내 쿼리를 달성하기 위해 노력하고있어 : 그것은 ID를가

이 모델을 찾기

내부 배열에 특정 값이 있으면 배열에서 제거하십시오.

값이 inner_array 내에 있지 않은 경우, 나는이 하나의 findOneAndUpdate에 기록 될 수 있다고 생각,하지만 난 구문을 알아낼 수 없습니다

var target_id = // document id 
var inner_object_id = // value to push 

models.MyModel.findOne(
    {_id: target_id}, 
    function (err, model) { 
    // IN THIS SCOPE 'INNER_OBJECT_ID' IS UNDEFINED 

    // if model.inner_array contains 'inner_object_id', remove it 
    // otherwise, push 'inner_object_id' into model.inner_array 

    model.save(); 
    res.json(model); // return modified document to client 
    } 
); 

..

감사을 많이 밀어 !

답변

1

난 당신이

var target_id = // document id 
var inner_object_id = // value to push 

models.MyModel.findOne({ 
    _id: target_id 
}, function (err, model) { 
    if (model.inner_array.indexOf(inner_object_id) !== -1) { 
    model.inner_array.pull(inner_object_id); 
    } else { 
    model.inner_array.addToSet(inner_object_id); 
    } 
    model.save(); 
    res.json(model); // return modified document to client 
} 
+0

MongooseArray.pullMongooseArray.addToSet를 사용하여 콜백 함수에서,이 방법으로 그 일에 문제가 발생했습니다 것을 달성 할 수 있다고 생각 - 'inner_object_id'변수가 정의되지 않습니다. – Moka

+0

전에 정의되었습니다. 좋아요 .bind()를 사용하여 변수를 전달한 것으로 보입니다. – Moka

+0

기꺼이 도와 드리겠습니다. –

관련 문제