を使用してオブジェクトを更新:のMongoDB:私は次の形式を持つオブジェクトを有するドット表記(マルチレベル・オブジェクト)
{
"_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);
現在の回答は、あなたが試行している方法を更新できない理由を説明しています。しかし、「グループ」をオブジェクトとして設計した場合、キーがgroupName、値がグループオブジェクトである場合には、もっと簡単になるだろうと付け加えたいと思います。あなたは頻繁にこの方法でアクセスしたいと思っているようです。 – jdi
私はそれを考慮する、アドバイスのおかげで! – IRousso