2016-10-07 9 views
0

私はMongoError: The dollar ($) prefixed field '$inc' in '$inc' is not valid for storage.流星MongoDBのドキュメントを更新

const modifier = { $set: {}, $inc: { 'hearts.counter': 1 } }; 
modifier.$set[`hearts.records${i}.expDate`] = expDate; 
Meteor.users.update(lookUpUser._id, { modifier }); 

は、これまでのところ、私が試したエラーになっていますか?誰かが私を助けてくれる?

EDIT: 私のユーザーのコレクションは、次のようになります。

{ 
    "_id": "xxxxx", 
    "username": "xxxx", 
    "hearts": { 
    "counter": 0, 
    "records": [{ 
     "owner": "xxxxx", 
     "expDate": Date 
    }, { 
     "owner": "xxxxx", 
     "expDate": Date 
    }] 
    } 
} 
+0

うん、私は、文書の配列 'hearts.records'をループだし、' hearts.records [インデックス] .expDate'は 'オーバー30日である場合'$ inc hearts.counter'を1で更新し、' $ set hearts.records [index] .expDate'を新しい 'expDate'に更新します。私はそれが明確であることを望みます。 – cocacrave

+0

他のプロパティにドットを入れてみてください'hearts.records。$ {i} .expDate' – chridam

+0

私は今試しました。引き続き同じエラーが発生する – cocacrave

答えて

0

私はあなたがそれをやっている方法、$setは配列ではなくオブジェクトであることを考えます。 @chridamが述べたように、おそらくドットを追加する必要があります。

const modifier = { $set: {}, $inc: { 'hearts.counter': 1 } }; 
modifier.$set = { [`hearts.records.${i}.expDate`]: expDate } 
Meteor.users.update(lookUpUser._id, modifier); 

または直接:これを試してみてください

const modifier = { 
    $set: { 
    [`hearts.records.${i}.expDate`]: expDate, 
    }, 
    $inc: { 
    'hearts.counter': 1, 
    }, 
}; 
Meteor.users.update(lookUpUser._id, modifier); 
関連する問題