与arrayFilters的猫鼬批量操作不起作用

时间:2019-02-26 12:59:49

标签: node.js mongodb mongoose

这是我要通过批量操作更新的文档:

{
    "_id": {
        "$oid": "5c640a5fa22c532e18077037"
    },
    "ids": [
        {
            "id": "ee51c1d1-cd60-45d3-9d76-166631545189",
            "userName": "anon7",
            "read": true
        },
        {
            "id": "fab5c05d-7fad-4c16-a80c-1237c6d6ee76",
            "userName": "anon6",
            "read": false
        }
    ],
    "convoId": "58ab583d-73d2-41f6-9d32-1bb2835d15c8",
    "postTitle": "Ncjcj",
    "messages": [
        {
            "text": "asdad",
            "id": "d27e23b1-4a73-4ae4-8589-5ce4aac92763",
            "userId": "ee51c1d1-cd60-45d3-9d76-166631545189",
            "date": 1550060127963
        }
    ]
}

现在我想一次执行2项操作。首先,在message数组中插入一个新的message对象。这个很好用。我的第二个批量操作应在id数组中查询具有与给定id匹配的id属性的对象,然后将该对象的read属性更新为false。 为此,我正在使用ArrayFilters,因为我看不到其他任何工作方式。

查询如下:

bulk.find(convoId: "58ab583d-73d2-41f6-9d32-1bb2835d15c8")
.arrayFilters([{ "elem.id":  receiverId }])
.updateOne("ids.$[elem].read" : false);

因此,当我执行批量操作时,第一个执行并开始工作,但随后我收到第二个错误:

bulk.find(...).arrayFilters is not a function

所以我查了一下,但是对于我的猫鼬和mongodb版本,arrayFilters应该可以工作。

我的版本:

"mongodb": "^3.1.8",
"mongoose": "^5.4.14",

有人知道如何解决这个问题吗? 预先感谢!

0 个答案:

没有答案