2

私のオブジェクトは次のようになります。

Stats = {
  name: 'filters'
  variants: [
    {
      variant: 'A'
      displayed: 123
      actions: [
        {
          name: 'clicked'
          triggered: 12
        }

      ]
    },
    {
      variant: 'B'
      displayed: 123
      actions: [
        {
          name: 'clicked'
          triggered: 12
        }
      ]
    }
  ]
}

バリアントの配列があり、その中にアクションの配列があります。選択した とtriggeredのフィールドをインクリメントしたいと思います。私はmeteor.jsでそれを使用しています。variantactions.name

私の検索クエリは次のようになります。

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 に答える