2015-12-16 10 views
5

の配列からのObjectIdを削除します。私が使用して私のモデルでは、その情報を保存するには ["56153e4c2040efa61b4e267f","56033932efefe0d8657bbd9e"] :私は何をしようとしている私はこのようなOBJECTIDを持っているのObjectID

items: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Items' 
}] 

は、要素を引くことです削除要求のフロントエンドから送信するobjectIdに等しい配列の配列を返します。

私が使用しているコード:

_.remove(unit.items, request.params.itemId); 

を私はlodashライブラリを使用しています。

私が考えている問題は、配列にObjectId要素があり、request.params.itemIdという文字列と比較しようとしていることです。

+0

あなたは、配列から配列を削除しようとしている、またはあなたが文書の配列を持っている、とあなたはreq.params.itemIdに一致するものを削除したいのですか? – steezeburger

答えて

2

ObjectIdの配列として保存された "Assignment"オブジェクトの配列を持つ "Event"オブジェクトの設定は非常に似ています。私は単にここで

obj.arrayField.remove(idToRemove); 

を使用することができた私の削除ルートハンドラの内部に関連するコードです:

var id = req.assignment._id; 
req.event.assignments.remove(id); 
req.event.save(function(err, event) { 
    //etc 
} 

はあなたのためにこの仕事をしていますか?

unit.items.remove(request.params.itemId); 
+0

ありがとう@MosheKarmel、素晴らしい作品、今私は、私は配列を持っていると言ってみましょうoldItems = ["56153e4c2040efa61b4e267f"、 "56033932efef0d8657bbd9e"]と別の配列newItems = ["56033932efe0d8657bbd9e"]、私は_difference(oldItems、newItems)のようなロダッシュ差分関数ですが、結果は["56153e4c2040efa61b4e267f"、 "56033932efef0d8657bbd9e"]です。私は何が欠けているのですか? – Diego

+0

私は確かではない、私は本当にロダシュを知っていない:(あなたが私の質問に答えた場合私の答えを正しくマークすることができますか?あなたは新しい質問としてそれを求めることができます... –

+0

ありがとう@moshe – Diego

1

比較できる実際のオブジェクトを取得するには、文字列をmongoose.Types.ObjectId('')に渡す必要があります。

だから_.remove(unit.items, mongoose.Types.ObjectId(req.params.itemId));