[英]Mongoose - Update a document's map
我有以下架构:
...
friends: {
type: Map,
of: String
},
...
我正在创建一个可以添加朋友的游戏,所以我想将朋友的用户名和 ID 存储在 map 中。 当我做
const requestantFriends = await UserData.findOne({userId: requestantData._id})
await UserData.findOneAndUpdate({userId: requestantData._id}, {friends: requestantFriends.friends.set(targetData._id, "test")}, {new: true})
似乎什么都没有发生。 如果我检查数据库,它仍然显示 Map(0) {} 。 如何更新文档的 map 并保存?
我也试过
const requestantFriends = await UserData.findOne({userId: requestantData._id})
await requestantFriends.friends.set(targetData._id, "test")
await requestantFriends.save()
我假设“朋友”map 是 UserData model 中的一个字段。
这是代码!
await UserData.findOneAndUpdate({userId: requestantData._id}, {
$set: {
[`friends.${targetData._id}`]: "test",
}
});
首先,我们找到userId
与requestantDate._id
匹配的文档。 然后,我们使用 MongoDB $set
运算符添加新的键值对。 我们将键括在括号中以表明它的值包含一个变量,然后我们使用反引号创建一个模板文字,以便我们可以插入变量键名。 最后,我们提供一个值并关闭所有内容!
MongoDB 使用BSON存储数据,它没有Map
类型。
当 Mongoose 保存包含 map 的文档时,它作为嵌入式 ZA8CFDE6331BD59EB2AC96F8911C4B 存储在 MongoDB 中。
如果您使用find
检索 object,Mongoose 会将 object 重构为get
并set
为修改,然后您需要使用和使用。
当使用findOneAndUpdate
或任何update
变体时,ZCCADCDEDB567ABAE643E15DCF0974E503Z 将操作发送到 MongoDB 以使其在服务器端执行。
MongoDB 可以理解的操作是$set
,所以更新应该是这样的:
await UserData.findOneAndUpdate({userId: requestantData._id}, {$set: {"friends._id": "test"})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.