我的对象如下:
Stats = {
name: 'filters'
variants: [
{
variant: 'A'
displayed: 123
actions: [
{
name: 'clicked'
triggered: 12
}
]
},
{
variant: 'B'
displayed: 123
actions: [
{
name: 'clicked'
triggered: 12
}
]
}
]
}
我有一系列变种,并且在其中包含一系列操作。我想为选定的triggered
和variant
增加actions.name
字段。我在meteor.js中使用它。
我的查询查询如下所示:
Stats.find({
name: 'filters',
variants: {
$elemMatch: {
variant: 'A',
'actions.name': 'clicked'
}}})
现在如果对象存在,我想做类似下面的事情,但我知道它不起作用。
Stats.update({
name: 'filters',
variants: {
$elemMatch: {
variant: 'A',
'actions.name': 'clicked'
}}},
{
$inc: {
'variants.$.actions.$.triggered': 1
}})
我知道位置$运算符充当更新查询选择器的第一个匹配项的占位符。但也许你还有其他想法怎么做?
答案 0 :(得分:1)
我最终将结构扁平化为:
Stats = [
{
name: 'filters'
variant: 'A'
displayed: 123
actions: [
{
name: 'clicked'
triggered: 12
}
]
},
{
name: 'filters'
variant: 'B'
displayed: 123
actions: [
{
name: 'clicked'
triggered: 12
}
]
}
]
在这里我可以轻松地增加triggered
值:
Stats.update({
name: 'filters',
variant: 'A',
'actions.name': 'clicked'
}, {
$inc: {
'actions.$.triggered': 1
}})
我只在服务器端使用此代码。无论如何,谢谢你的帮助!
答案 1 :(得分:0)
目前$
运算符在minimongo上不可用,甚至在服务器上也存在一些故障(至少在我最后使用它时)。
它是一个已知问题,看起来很快就会修复: https://github.com/meteor/meteor/issues/153