我需要使用一次调用将多个值推送到mongoose中的数组中.我尝试使用较小的数组,但数组作为子数组插入.
var kittySchema = new mongoose.Schema({
name: String,
values: [Number]
});
var Kitten = db.model('Kitten', kittySchema);
Kitten.update({name: 'fluffy'},{$push: {values:[2,3]}},{upsert:true},function(err){
if(err){
console.log(err);
}else{
console.log("Successfully added");
}
});
Run Code Online (Sandbox Code Playgroud)
调用上述代码三次的结果给出了以下结果:
{ "_id" : ObjectId("502b0e807809d79e84403606"), "name" : "fluffy", "values" : [ [ 2, 3 ], [ 2, 3 ], [ 2, 3 ] ] }
Run Code Online (Sandbox Code Playgroud)
而我想要的是这样的:
{ "_id" : ObjectId("502b0e807809d79e84403606"), "name" : "fluffy", "values" : [ 2, 3 ,2 ,3, 2, 3] }
Run Code Online (Sandbox Code Playgroud)
我注意到的另一件事是数组中的类型(值)被指定为Number,那么'strict'选项是否确保没有插入除NUM以外的任何东西?在这种情况下,允许插入另一个数组.
Ste*_*nie 40
不推荐使用$ push $ each查看下面的其他解决方案
你的例子很接近,但你想要$ pushAll而不是$ push来分别添加每个值(而不是将另一个数组推到values数组上):
var Kitten = db.model('Kitten', kittySchema);
Kitten.update({name: 'fluffy'},{$pushAll: {values:[2,3]}},{upsert:true},function(err){
if(err){
console.log(err);
}else{
console.log("Successfully added");
}
});
Run Code Online (Sandbox Code Playgroud)
Ami*_*noy 31
(2014年12月更新)从MongoDB2.4开始,你应该使用:
Kitten.update({name: 'fluffy'}, {$push: {values: {$each: [2,3]}}}, {upsert:true}, function(err){
if(err){
console.log(err);
}else{
console.log("Successfully added");
}
});
Run Code Online (Sandbox Code Playgroud)
或者将 $each 修饰符与 $addToSet 一起使用:
https://docs.mongodb.com/manual/reference/operator/update/addToSet/#each-modifier
Run Code Online (Sandbox Code Playgroud)// Existing tags array { _id: 2, item: "cable", tags: [ "electronics", "supplies" ] } // Add "camera" and "accessories" to it db.inventory.update( { _id: 2 }, { $addToSet: { tags: { $each: [ "camera", "accessories" ] } } } )
| 归档时间: |
|
| 查看次数: |
45566 次 |
| 最近记录: |