繁体   English   中英

Mongoose - 更新文档的 map

[英]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",
  }
});

首先,我们找到userIdrequestantDate._id匹配的文档。 然后,我们使用 MongoDB $set运算符添加新的键值对。 我们将键括在括号中以表明它的值包含一个变量,然后我们使用反引号创建一个模板文字,以便我们可以插入变量键名。 最后,我们提供一个值并关闭所有内容!

MongoDB 使用BSON存储数据,它没有Map类型。

当 Mongoose 保存包含 map 的文档时,它作为嵌入式 ZA8CFDE6331BD59EB2AC96F8911C4B 存储在 MongoDB 中。

如果您使用find检索 object,Mongoose 会将 object 重构为getset为修改,然后您需要使用和使用。

当使用findOneAndUpdate或任何update变体时,ZCCADCDEDB567ABAE643E15DCF0974E503Z 将操作发送到 MongoDB 以使其在服务器端执行。

MongoDB 可以理解的操作是$set ,所以更新应该是这样的:

await UserData.findOneAndUpdate({userId: requestantData._id}, {$set: {"friends._id": "test"})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM