MongoDB update$pull运算符未从数组中删除项

MongoDB update$pull运算符未从数组中删除项,mongodb,Mongodb,我在MongoDB有一个收藏。 并希望从数组中删除项 我的“用户”集合是一个对象数组 当我打字时: db.users.find({"tasks.task_id" : "h58sjIdj3jJZ"}).pretty() 在mongo shell中,我得到以下结果: { "_id" : ObjectId("5955b45b7a4bf40544019359"), "profile" : { "name" : "Morning bay", "email" : "morbay23

我在MongoDB有一个收藏。 并希望从数组中删除项

我的“用户”集合是一个对象数组

当我打字时:

db.users.find({"tasks.task_id" : "h58sjIdj3jJZ"}).pretty()
在mongo shell中,我得到以下结果:

{
  "_id" : ObjectId("5955b45b7a4bf40544019359"),
  "profile" : {
    "name" : "Morning bay",
    "email" : "morbay232@google.su",
    "phone" : "+1-641-155-88-84",
    "description" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit"
  },
  "tasks" : [
    {
      "task_id" : "h58sjIdj3jJY",
      "time" : "11:15 AM",
      "date" : "07/01/2017",
      "description" : "Make 1st call to John White"
    },
    {
      "task_id" : "h58sjIdj3jJZ",
      "time" : "14:30 PM",
      "date" : "07/09/2017",
      "description" : "Send certificate and make Another call to J.White"
    }
  ],
  "progress" : [
    {
      "isActive" : "",
      "description" : ""
    }
  ]
}
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
所以,我收藏的每一件物品都是这样的。 没关系

但现在我想从“任务”数组中的一个用户项目中删除一个项目

I类型:

db.users.update({}, {$pull : {"tasks" : {"task_id" : "h58sjIdj3jJZ"}}});
要获得此结果,请执行以下操作:

{
  "_id" : ObjectId("5955b45b7a4bf40544019359"),
  "profile" : {
    "name" : "Morning bay",
    "email" : "morbay232@google.su",
    "phone" : "+1-641-155-88-84",
    "description" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit"
  },
  "tasks" : [
    {
      "task_id" : "h58sjIdj3jJY",
      "time" : "11:15 AM",
      "date" : "07/01/2017",
      "description" : "Make 1st call to John White"
    },
    {
      "task_id" : "h58sjIdj3jJZ",
      "time" : "14:30 PM",
      "date" : "07/09/2017",
      "description" : "Send certificate and make Another call to J.White"
    }
  ],
  "progress" : [
    {
      "isActive" : "",
      "description" : ""
    }
  ]
}
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

我阅读了文档,其中的示例看起来很相似,所以我不知道哪里有错误。

我在MongoDB终端上在线测试了它,您的查询正确地提取了文档

这是你的电话号码


您是否在shell或使用ODM(如Mongoose)时遇到此问题?

我在MongoDB终端上在线测试了它,您的查询正确地提取了文档

这是你的电话号码


您是否在shell或使用ODM(如Mongoose)时遇到此问题?

您在更新搜索查询中使用
{}
默认的意思是
查找任何文档
,然后您正在修改其任务列表
{$pull:{“tasks”:{“task_id:“h5sjidj3jz”}

因此,可能正在修改另一个文档(该文档可能包含id为h58sjIdj3jJZ的任务,也可能不包含id为H58SJIDJ3JZ的任务,但在这种情况下,它是否包含该任务并不重要)

您有两种选择: 使用:

db.users.update({},{$pull:{“tasks”:{“task_id”:“h58sjIdj3jJZ”}},{multi:true})

最终涉及数据库中每个文档的内容

使搜索查询更具体(在任务中提供id或查找任务id为的项)


db.users.update({“tasks.task_id”:“h58sjidj3jz”},{$pull:{“tasks”:“task_id”:“h58sjidj3jz”}})

您在更新搜索查询中使用
{}
默认的意思是
查找任何文档
,然后您正在修改其任务列表
{$pull:{“tasks”:{“task_id”:“h58sjidj3jz”}

因此,可能正在修改另一个文档(该文档可能包含id为h58sjIdj3jJZ的任务,也可能不包含id为H58SJIDJ3JZ的任务,但在这种情况下,它是否包含该任务并不重要)

您有两种选择: 使用:

db.users.update({},{$pull:{“tasks”:{“task_id”:“h58sjIdj3jJZ”}},{multi:true})

最终涉及数据库中每个文档的内容

使搜索查询更具体(在任务中提供id或查找任务id为的项)


db.users.update({“tasks.task_id”:“h58sjidj3jz”},{$pull:{“tasks”:“task_id”:“h58sjidj3jz”}})

它应该可以工作。您的mongodb版本是什么?能否添加{multi:true}作为更新的第三个参数
db.users.update({},{$pull:{“tasks”:{“task_id”:“h58sjIdj3jJZ”}},{multi:true})已经尝试过了,但是没有帮助。它应该可以工作。您的mongodb版本是什么?能否添加{multi:true}作为更新的第三个参数
db.users.update({},{$pull:{“tasks”:{“task_id”:“h58sjIdj3jJZ”}},{multi:true})
已经尝试过了,但是它没有帮助我使用MongoJS而不是Mongoose。是的,也有同样的问题。它不会从任务数组中删除项目。我使用MongoJS而不是Mongoose。是的,也有同样的问题。它不会从任务数组中删除项目。是!我使用了
db.users.update({“tasks.task_id”:“h58sjIdj3jJZ”},{$pull:{“tasks”:{“task_id”:“h58sjidj3jz”}}})
,这很有帮助!非常感谢。对我使用了
db.users.update({“tasks.task_id”:“h58sjIdj3jJZ”},{$pull:{“tasks”:{“task_id”:“h58sjidj3jz”}}})
,这很有帮助!非常感谢。