我如何更新许多 mongodb
Posted
技术标签:
【中文标题】我如何更新许多 mongodb【英文标题】:How can I updateMany mongodb 【发布时间】:2022-01-18 21:22:18 【问题描述】:我有三个聊天室,我想仅当用户与 members.user_id 匹配时才使用 MongoDB 更新文档。我不明白,它正在以相同的令牌更新到所有成员的设备。如果有人有想法?
这是我的 Node.js 代码:
const _id = req.params._id;
const token = req.body.token;
const user_id = req.body.user_id;
try
const updateDevice = await ChatRoom.updateMany(
"members.$[].user_id" : user_id,
$set:"members.$[].devices":token)
res.send(updateDevice)
catch(err)console.log(err)
const mongoose = require('mongoose');
const chatRoom_schema = new mongoose.Schema(
name:
type:Array,
name:String,
,
members:
user_id:String,
name:String,
devices:String,
type:Array,
required:true
,
lastMessage:
content:String,
createdAt:Date,
type:Array,
send_by:String,
readBy:Array
,
collection: "chatRoom"
)
module.exports = chatRoom = mongoose.model("ChatRoom", chatRoom_schema);
【问题讨论】:
【参考方案1】:根据架构,有一个 members 对象而不是 对象数组,因此只能访问特定元素 dot(.)使用运算符。如果您想访问数组中的任何元素或想更新对象数组中的特定对象值,则使用 $。
试试这个查询来解决问题
ChatRoom.updateMany(
"members.user_id" : user_id,
$set:"members.devices":token)
让有这样的记录
members=[
"user_id":"1",
"name":"DD",
"type":"ADMIN"
,
"user_id":"2",
"name":"HH",
"type":"CUSTOMER"
]
要将 user_id(2) 的类型从 CUSTOMER 更新为 ADMIN,$ 操作符会很有用。
查询可以是
ChatRoom.updateMany("members.$.user_id" : 2,
$set:"members.$.type":"ADMIN")
【讨论】:
你好!谢谢你,我猜对了。我已经做到了: const updateDevice = await ChatRoom.updateMany( "members.user_id" : user_id, $set:"members.$.devices":token) res.send(updateDevice) 现在可以工作了,真的,谢谢!!以上是关于我如何更新许多 mongodb的主要内容,如果未能解决你的问题,请参考以下文章