2015-01-10 8 views
5

में किसी सरणी पर ऑब्जेक्ट को जोड़ने के लिए मेरे पास एक संग्रह है जो कुछ उत्पादों के दस्तावेज़ संग्रहीत करता है। दस्तावेज़ में, उत्पाद पर उपयोगकर्ताओं के मूल्य मूल्यांकन की वस्तुओं को संग्रहीत करने के लिए evaluation एक सरणी है।

यहां उपयोगकर्ता वस्तु का एक उदाहरण है:

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

किसी को भी मुझे बता सकते हैं कि यह एक ऐसा करने के लिए संभव है "डुप्लिकेट अद्यतन पर डालें" evaluation सरणी पर? मैं $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 डुप्लिकेट ऑब्जेक्ट की जांच के लिए आईडी फ़ील्ड का उपयोग करने के लिए काम करता है?

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} 'जोड़ें एएमए, इस तरह मोंगोज़ उप दस्तावेजों के लिए '_id' नहीं बनाएगा। - http://stackoverflow.com/questions/17254008/stop-mongoose-from-created-ids-for-subdocument-arrays – BatScream

+0

मूल प्रश्न को हल करने की कोशिश कर रहे समस्या को निर्दिष्ट करने की आवश्यकता है –

उत्तर

4

आप तत्वों के लिए एक इनलाइन स्कीमा घोषित करने और _id को अक्षम करके evaluation सरणी तत्वों के लिए एक _id क्षेत्र जोड़ने से नेवला रोका जा सकता है:

var evaluation = new mongoose.Schema({ 
    product:[], 
    timestamp : { type : Date, default: Date.now }, 
    evaluation:[Schema({user_id:Number,price:Number}, {_id: false})], 
},{strict:false}); 
संबंधित मुद्दे