MongoDB更新多个条件匹配的地方

时间:2018-08-27 08:07:52

标签: node.js mongodb mongoose nosql

我有以下mongoDB文档:

        {
        "_id" : "5b76c3c037548390fdb5b40e",
        "userId" : "4601",
        "news" : [
            {
                "newsId" : "1",
                "progress" : "0",
            },
            {
                "newsId" : "2",
                "progress" : "100",
            },
            {
                "newsId" : "3",
                "progress" : "45",
            },
        ],
        "modified" : ISODate("2018-08-21T19:13:43.301+05:30"),
        "created" : ISODate("2018-08-21T19:13:43.301+05:30"),
        "completionStatus" : "0",
    },
    {
        "_id" : "5b76c3c037548390fdb5b40e",
        "userId" : "1234",
        "news" : [
            {
                "newsId" : "2",
                "progress" : "100",
            },
            {
                "newsId" : "3",
                "progress" : "100",
            },
        ],
        "modified" : ISODate("2018-08-21T19:13:43.301+05:30"),
        "created" : ISODate("2018-08-21T19:13:43.301+05:30"),
        "completionStatus" : "0",
    }

news数组可以包含n个JSON。一个数组的一个用户数为3,其他数组为2。

现在,我要根据以下条件将 completionStatus 更新为1:

条件1:文档的修改日期为今天。已经有一个修改键。

条件2:新闻数组的每个元素的进度为100。

1 个答案:

答案 0 :(得分:1)

这应该有效:

collection.update({
  modified: {
    $gte: startOfDay,
    $lte: endOfDay
  },
  news: {
    $not: {
      $elemMatch: {
        progress: {
          $ne: "100"
        }
      }
    }
  }
}, {
  $set: {
    completionStatus: "1"
  }
});