次のフォームのオブジェクトがあります。
{
"_id": ObjectId("4fa43f4d1cf26a6a8952adf1"),
"userId": "1",
"facebookId": "1234",
"groups": [{
"groupName": "testGroup",
"members": [{
"memberFirstName": "userFirstName",
"memberLastName": "userLastName",
"memberDetails": {
"userId": "1",
"faceBookId": "1234"
}
}]
}]
}
これは、各ユーザー (そのグループ) を保持するコレクションであり、各グループにはグループ メンバーが含まれています...したがって、「グループ」キーは配列 (またはリスト) であり、「メンバー」キーも同様です。(各ユーザーは複数のグループを持つことができ、各グループは複数のグループ メンバーを持ちます)。
新しいグループメンバーでオブジェクトを更新するのに苦労しています。私がやろうとしていることは次のとおりです:
db.collection.update({
userId: "1"
}, {
$push: {
"groups.members": {
membersDetails: {
userId: "2",
faceBookId: "54321"
},
memberFirstName: "UserB",
memberLastName: "UserBLastName"
}
}
});
しかし、うまくいかないようです。
次のエラーが発生しました:
can't append to array using string field name [members]
Java ドライバーも使用しようとしていますが、うまくいかないようです。
DBObject query = new BasicDBObject("userId", "1");
DBObject newMemberDetailsObj = new BasicDBObject();
newMemberDetailsObj.put("userId", "2");
newMemberDetailsObj.put("faceBookId", "54321");
DBObject newMemberObj = new BasicDBObject();
newMemberObj.put("memberFirstName", "userB");
newMemberObj.put("memberLastName", "UserBLastName");
newMemberObj.put("memberDetails", newMemberDetailsObj );
DBObject update = new BasicDBObject("$push", new BasicDBObject("members", newMemberObj));
update.put("groupName", "testGroup");
DBObject maintain = new BasicDBObject("$push", new BasicDBObject("groups", update));
WriteResult newWr = coll.update(query, maintain);