$addToSet 一个对象到猫鼬中的数组
$addToSet an object to an array in mongoose
我有一个存储一些产品文档的集合。文档中有一个数组evaluation
,用于存储用户对某商品的价格评价对象
这是用户对象的示例:
var data = {user_id:90,price:400}
谁能告诉我是否可以在 evaluation
数组上执行 "Insert on duplicate update"?我试过 $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 字段检查重复对象的方式吗?
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();
})
})
您可以通过声明元素的内联模式并禁用 _id
:
来防止 Mongoose 添加 _id
字段到 evaluation
数组元素
var evaluation = new mongoose.Schema({
product:[],
timestamp : { type : Date, default: Date.now },
evaluation:[Schema({user_id:Number,price:Number}, {_id: false})],
},{strict:false});
我有一个存储一些产品文档的集合。文档中有一个数组evaluation
,用于存储用户对某商品的价格评价对象
这是用户对象的示例:
var data = {user_id:90,price:400}
谁能告诉我是否可以在 evaluation
数组上执行 "Insert on duplicate update"?我试过 $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 字段检查重复对象的方式吗?
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();
})
})
您可以通过声明元素的内联模式并禁用 _id
:
_id
字段到 evaluation
数组元素
var evaluation = new mongoose.Schema({
product:[],
timestamp : { type : Date, default: Date.now },
evaluation:[Schema({user_id:Number,price:Number}, {_id: false})],
},{strict:false});