2

我的对象如下所示:

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
}})

我知道位置 $ 运算符充当更新查询选择器的第一个匹配项的占位符。但也许你有任何其他想法如何做到这一点?

4

2 回答 2

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
}})

我仅在服务器端使用此代码。无论如何,谢谢你的帮助!

于 2013-03-07T16:14:21.067 回答
0

目前该$操作员在 minimongo 上不可用,甚至在服务器上也存在一些故障(至少在我上次使用它时)。

这是一个已知问题,看起来它可能很快就会得到修复: https ://github.com/meteor/meteor/issues/153

于 2013-03-07T12:33:50.027 回答