我正在尝试通过猫鼬查询MongoDB数据库来更新数据库的许多字段。我想第一个请求是正确的,因为猫鼬不会触发任何错误,但是对于嵌套模式,我得到了以下错误。
我的目标是删除出现在好友中的userTag并删除当userTarget等于userTag时出现的friendRequestsSent,当userRequest等于userTag时接收的friendRequests和当数据等于userTag时的通知。
以下是我的模型的模式
const updateResponse = await User.updateMany(
{
friends: { $elemMatch: { $eq: userTag } },
friendRequestsSent: {
userTarget: {
$elemMatch: { $eq: userTag },
},
},
friendRequestsReceived: {
userRequest: {
$elemMatch: { $eq: userTag },
},
},
notifications: {
data: {
$elemMatch: { $eq: userTag },
},
},
},
{
$pull: {
friends: userTag,
friendRequestsSent: { userTarget: userTag },
friendRequestsReceived: { userRequest: userTag },
notifications: { data: userTag },
},
}
)
请求
Error while deleting the user account: Cast to String failed for value "{ '$elemMatch': { '$eq': '0eQzaAwpt' } }" at path "userRequest" for model "User"
错误
{{1}}
答案 0 :(得分:0)
userRequest
中的friendRequestsReceived
字段类型为String
,而不是数组,因此$elemMatch
将不起作用。另外,您无需使用$elemMatch
,因为您只需在$elemMatch
表达式中指定一个条件即可,如docs所示:
如果在$ elemMatch表达式中仅指定一个条件,则无需使用$ elemMatch。
就您而言,您只需要执行以下操作(详细信息here):
await User.updateMany({
friends: userTag,
"friendRequestsSent.userTarget" : userTag,
"friendRequestsReceived.userRequest": userTag,
"notifications.data": userTag
}...