gpt4 book ai didi

json - 蒙戈数据库 : updating an objects using dot notation (multi-level object)

转载 作者:可可西里 更新时间:2023-11-01 09:57:09 24 4
gpt4 key购买 nike

我有一个具有以下形式的对象:

{
"_id": ObjectId("4fa43f4d1cf26a6a8952adf1"),
"userId": "1",
"facebookId": "1234",
"groups": [{
"groupName": "testGroup",
"members": [{
"memberFirstName": "userFirstName",
"memberLastName": "userLastName",
"memberDetails": {
"userId": "1",
"faceBookId": "1234"
}
}]
}]
}

这是一个为每个用户保存的集合——它的组,每个组包含组成员...所以“groups”键是一个数组(或列表),“members”键也是。(每个用户可以有多个群组,每个群组有多个群组成员)。

我很难用新的组成员更新对象,我想做的是:

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);

最佳答案

这行不通,因为 groups 是一个数组,但您在引用其中的一个属性时就好像它是一个对象一样。您可以访问诸如 groups.0.membersgroups.1.members 之类的内容,因为它们引用数组中的特定项目,但 groups对象本身没有要追加的 members 属性。

我不完全确定你的更新需要做什么,但你可以在 groups.groupName 上添加一个过滤器到你的查询,然后执行 $push使用 groups.$.members 仅将成员附加到匹配的组。

http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

关于json - 蒙戈数据库 : updating an objects using dot notation (multi-level object),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10456325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com