mongodb - 删除 mongodb 中对象数组中的特定对象,按 id,而不是索引。- 不删除
问题描述
我有一个包含对象数组的集合 - 每个对象都有一个唯一的 ID - 我希望能够从数组中删除一个项目 - 或特定的记录。我的代码不会出错 - 但它不会从数组中删除对象。
馆藏结构
_id:
,username:
,prefs: [
_id:
,title:
]
数据看起来像
_id: 5a...46,
username: "bobsmith",
prefs: [
{
_id: 5...a,
composition_title: "blah 1"
}
,{
_id: 5 c...2,
composition_title: "blah 2"
}
,{
_id: 5 c...c,
composition_title: "blah 3"
}
]
代码:
module.exports.removeUserPref = function (uid, pid, callback) {
User.update(
{
'_id': mongoose.Types.ObjectId(uid)
},
{
$pull: { pref: { $elemMatch: { _id: mongoose.Types.ObjectId(pid) } } }
}
, callback);
}
我知道我传递的用户 ID 是正确的,并且我传递的 Pref Id 在数组中是正确的 - 但我的响应是:“nModified”:0 并且没有删除的项目
{
"n": 1,
"nModified": 0,
"opTime": {
"ts": "6641391849170796549",
"t": 4
},
"electionId": "7fffffff0000000000000004",
"ok": 1,
"operationTime": "6641391849170796549",
"$clusterTime": {
"clusterTime": "6641391849170796549",
"signature": {
"hash": "sBXjaw1nw99+cfMIMVNq5KtCpt8=",
"keyId": "6596828466803376130"
}
}
}
解决方案
$elemMatch
是一个query
与projection
运算符。与 .没有任何关系update operators
。
所以改为尝试做这样的事情
User.update(
{ "_id": mongoose.Types.ObjectId(uid) },
{ "$pull": { "pref": { "_id": mongoose.Types.ObjectId(pid) } } }
)
推荐阅读
- node.js - 在 main.ts 中使用 .env 文件中的数据 - NestJS
- r - 如何消除 R Shiny 中反应图下方的空白空间?
- java - 将 Quantity 的值作为 BigDecimal 获取
- python - 日期列和整数列相加给出错误 TypeError: unsupported type for timedelta days component: Series
- python - 尝试创建类的实例时,不了解关于参数数量的 TypeError 的原因
- python - Python导入torch需要很长时间才能初始化
- aws-xray - 如何按段或子段过滤 X 射线轨迹
- unit-testing - 当消息有撇号时,should_panic 和 expected 不起作用
- javascript - 为什么闭包中的自由变量值在直接访问时只返回初始值?
- reactjs - Context API 奇怪的情况