【问题标题】:MongoDB Update a Nested Array [duplicate]MongoDB更新嵌套数组[重复]
【发布时间】:2017-01-13 08:23:17
【问题描述】:

我有以下 JSON:

{
"_id" : ObjectId("57ce1a55899bf934e59edd0d"),
"project_name" : "Coupletones",
"list_users" : [
    "testmail"
],
"iterations" : [
    {
        "iteration_name" : "Iteration1",
        "tasks" : [ ]
    },
    {
        "iteration_name" : "Iteration2",
        "tasks" : [ ]
    },
]
}

我希望能够将内容推送到与迭代 2 关联的任务数组中。如何正确查询并插入到正确的位置?这是我目前所拥有的,但它总是插入到与迭代 1 关联的任务数组中。

var ans = collection_projects.update({
      "project_name" : project_name,
      "list_users" : email,
      "iterations.iteration_name": iteration_name,
      },

      {$addToSet: {"iterations.$.tasks": {
        task_name: task_name,
        task_description : task_description,
        task_assignee: task_assignee,
        task_status : -1 } } }
    );

我看过这个: MongoDB nested array query 但他只是试图推送到一个嵌套数组。

【问题讨论】:

  • positional update operator 更新它在数组中找到的第一个元素,正如Shumi Gupta 所回答的那样,您需要在查找/条件中包含要更新的元素。一个重要的通知,位置更新更新第一个且仅第一个元素。如果您需要更新数组中的多个元素,则(此时)需要在客户端进行。这个愿望有一张 JIRA 票

标签: arrays node.js mongodb


【解决方案1】:

用这个方法试试

conditions = {
    "_id": ObjectId"57ce1a55899bf934e59edd0d",
    "iterations.iterations_name": "Iteration2"
  };
updates = {
   $push: {
     "iterations.$.tasks": "success"
   }
};
options = {
  upsert: true
};
Model.update(conditions, updates, options, callback);

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2017-09-11
    • 2019-12-07
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多