【发布时间】:2016-01-26 08:50:56
【问题描述】:
我有以下简化方案:
var restsSchema = new Schema({
name: String
menu: [mongoose.Schema.Types.Mixed]
});
我的文档可能如下所示:
{
name: "Sandwiches & More",
menu: [
{id:1,name:"Tona Sandwich",price: 10, soldCounter:0},
{id:2,name:"Salami Sandwich",price: 10, soldCounter:0},
{id:3,name:"Cheese Sandwich",price: 10, soldCounter:0}
]
}
集合rests 的索引为:
db.rests.createIndex( { "menu.id": 1} , { unique: true })
假设我有这个 id 数组 [1,3],基于此我需要将 soldCounter 增加 1 个 menu ids=1 或 3 的项目。
什么是必须有效的方法?
感谢帮助!
编辑: 我使用了以下解决方案:
db.model('rests').update({ _id: restid,'menu.id': {$in: ids}}, {$inc: {'menu.$.soldCounter': 1}}, {multi: true},function(err) {
if(err)
console.log("Error while updating sold counters: " + err.message);
});
其中ids 是具有菜单项ID 的整数数组。
restid 是我们要在集合中编辑的特定文档的 id。
由于某种原因,只有 ids 数组中的第一个 id 正在更新。
【问题讨论】:
-
您是否已经实现了一些您认为不够高效的东西?
-
是的,我更新了整个剩余模型,它在其未简化的形式中相当大。我使用
find()找到了其余部分,在回调中我在循环中寻找想要的 soldCounters,增加它们并保存模型。效率不高,还可能导致一些数据完整性问题。