【发布时间】:2017-04-12 10:19:49
【问题描述】:
我有一个集合播放列表,其中包含一组项目
{
userId: {
type : String,
required : true,
index : true,
unique : true
},
items: [
{
id: { // do not mix up with _id, which is the autogenerated id of the pair {id,type}. ID is itemId
type : Schema.Types.ObjectId
},
type: {
type : String
}
}
]
}
当我将一对 {id,type} 推送到 items 时,Mongo 会自动将 _id 字段添加到项目中(但我不在乎)。
现在我想从 items 数组中一次删除几个“对”。
我曾尝试使用 $pullAll,但它需要完全匹配,而且我不知道 _id,因此它不会从 items
中删除任何内容playlistModel.update({userId:userId},{$pullAll:{items:[{id:"123",type:"video"},{id:"456",type:"video"}]}},null,function(err){
我尝试过使用具有不同变体的 $pull,但它从 items
中删除了所有对象playlistModel.update({userId:userId},{$pull:{items:{"items.id":{$in:["123","456"]}}}},null,function(err){
playlistModel.update({userId:userId},{$pull:{items:{$in:[{id:"123",type:"video"},{id:"456",type:"video"}]}}},null,function(err){
我是遗漏了什么还是我在问一些没有实现的东西?
如果是后者,有没有办法解决这个_id问题?
【问题讨论】:
-
没有清楚地理解你在这里想要做什么。您想删除匹配的
several pairs而不是all the pairs。这甚至意味着什么? -
假设我有一个播放列表文档,其“items”数组为 [{id:"123",type:"video"},{id:"456",type:"video"}, {id:"789",type:"video"}] (注意 mongodb 将 _id 添加到项目中的这 3 个对象)我想例如删除 {id:"123",type:"video"} 和 {id: "456",type:"video"} 来自 1 个查询中的 "items"(只留下其他对象,在此示例中为 {id:"789",type:"video"})我认为与 "exact" 混淆匹配”来自我不知道要删除的对象的 _id 的事实。希望现在有意义!
-
为什么不禁用为嵌入文档创建
_id字段?看看这个stackoverflow.com/questions/17254008/… -
听起来不错!我会看看那个:)
标签: arrays node.js mongodb mongoose