私は、ユーザーIDとステータスに関する条件と日付フィールドlastSentを更新しようとしていますのMongoDB - 更新特定の配列要素
{
_id: {
userId: "abc"
},
val: {
status: 1,
prefs: [
{
value: "condition",
lastSent: ISODate("2017-07-17T23:46:53.717Z")
}
],
deal: 2,
prevDeal: 3
}
}
以下のように文書構造を持つコレクション「環境設定」を持っています。以下は私のJavaコードから導き出されたクエリです。
選択クエリ:
{ "_id" : { "userId" : "abc"} , "val.status" : 1 , "val.prefs.value" : "condition"}
更新クエリ:
{ "$set" : { "val.prefs.$.lastSent" : { "$date" : "2017-07-17T23:50:07.009Z"}}}
次のように上記のクエリがエラーを与えている: '。環境設定$ lastSent'
点線のフィールド「をヴァルで.prefs。$。lastSent 'は格納に有効ではありません。
どうすればよいですか?以下は
は私のJavaコードです:あなたが言及する必要はありませんBasicDBObject _idObject = new BasicDBObject();
_idObject.put("userId", "abc");
BasicDBObject _selectQuery = new BasicDBObject();
_selectQuery.put("_id", _idObject);
_selectQuery.put("val.status", 1);
_selectQuery.put("val.prefs.value", "condition");
BasicDBObject _valueUpdateQuery = new BasicDBObject();
_valueUpdateQuery.put("prefs.$.lastSent", lastSent);
BasicDBObject _updateQuery = new BasicDBObject();
_updateQuery.put("$set", new BasicDBObject("val", _valueUpdateQuery));
prefs.update(_selectQuery, _updateQuery, true, true);
Javaコードを表示してください。 –
編集にJavaコードを追加しました。チェックしてください。 @Héctor –
それは間違っているからです。あなたは鍵を分けた。 '_updateQuery.put(" $ set "、新しいBasicDBObject(" val.prefs。$。lastSent "、lastSent));'でなければなりません。キーを入れ子にしても、実際には同じことを求めているわけではありません。 –