2015-01-10 7 views
5

私はいくつかの製品のドキュメントを格納するコレクションを持っています。この文書には、ユーザーの価格評価のオブジェクトを製品に格納するための配列evaluationがあります。ここで

は、ユーザーオブジェクトの例です:それはevaluationアレイ上の「複製の更新に挿入」を行うことが可能かどう

var data = {user_id:90,price:400} 

誰も教えてもらえますか?私は$addToSetを試してみましたが、オブジェクトがevaluationにプッシュするときに、_idプロパティがあり、このように、私はモデルでそれを持っていないにも関わらず、ユーザーオブジェクトに追加しました:

{ 
    "_id": 54b13f52604fc5d242d4aa68, 
    "__v": NumberInt(0), 
    "evaluation": [ 
    { 
     "price": NumberInt(14616), 
     "user_id": NumberInt(91), 
     "_id": ObjectId("54b13f5e604fc5d242d4aa6b") // Why is it added? 
    }, 
    { 
     "price": NumberInt(16211), 
     "user_id": NumberInt(92), 
     "_id": ObjectId("54b140d1604fc5d242d4aa74") // 
    } 
    ], 
    "product": [ 
    { 
     "title": "ABC", 
     "model_id": "382", 
     "id": "513", 
     "category": "1", 
     "src": "xxx.jpg" 
    } 
    ], 
    "timestamp":ISODate("2015-01-10T15:03:46.310Z") 
} 

があることですどのように$addToSetは、重複したオブジェクトを確認するためにidフィールドを使用するように動作しますか?あなたは、要素のインラインスキーマを宣言し、_idを無効にすることによってevaluation配列要素に_idフィールドを追加することからマングースを防止することができる

model.js

var evaluation = new mongoose.Schema({ 
     product:[], 
     timestamp : { type : Date, default: Date.now }, 
     evaluation:[{user_id:Number,price:Number}], 
},{strict:false}); 

var models = { 
     Eva:mongoose.model('Evaluation',evaluation) 
    }; 

app.js

var mongo_models = require('./db/mongo_model')(mongoose); 
Eva = mongo_models.Eva; 

io.on('connection', function(socket){ 
    socket.on("evaluation",function(d){ 
    var data = {user_id:user_id,price:d.price}; 
    Eva.update({_id:d.tid},{$addToSet:{evaluation:data}}).exec(); 
    }) 
}) 
+3

あなたのschに '{_id:false}'を追加します。 ema、その方法では、サブ文書のために '_id'を作成しません。 - http://stackoverflow.com/questions/17254008/stop-mongoose-from-created-ids-for-subdocument-arrays – BatScream

+0

元の質問は解決しようとしている問題を特定する必要があります –

答えて

4

var evaluation = new mongoose.Schema({ 
    product:[], 
    timestamp : { type : Date, default: Date.now }, 
    evaluation:[Schema({user_id:Number,price:Number}, {_id: false})], 
},{strict:false}); 
関連する問題