Tôi có một bộ sưu tập lưu trữ tài liệu của một vài sản phẩm. Trong tài liệu, có một mảng evaluation
để lưu trữ các đối tượng đánh giá giá của người dùng trên một sản phẩm.
Dưới đây là một ví dụ về đối tượng sử dụng:
var data = {user_id:90,price:400}
bất cứ ai có thể cho tôi biết nếu nó có thể làm một "Chèn vào cập nhật bản sao" trên mảng evaluation
? Tôi đã cố gắng $addToSet
, nhưng khi một đối tượng được đẩy vào evaluation
, có một tài sản được bổ sung vào đối tượng người dùng _id
, mặc dù tôi không có nó trong mô hình, như thế này:
{
"_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")
}
Là cách $addToSet
hoạt động như thế nào để sử dụng trường id để kiểm tra đối tượng trùng lặp?
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();
})
})
Thêm '{_id: false}' vào lược đồ của bạn ema, theo cách đó, con điếm sẽ không tạo ra '_id' cho các tài liệu phụ. - http://stackoverflow.com/questions/17254008/stop-mongoose-from-created-ids-for-subdocument-arrays – BatScream
câu hỏi ban đầu cần phải xác định vấn đề mà họ đang cố giải quyết –