我目前在 nodejs(14.17.3) 和 typescript(3.8.0) 中使用 mongodb(4.0.1)。
我想要做的是使用 pull 运算符删除嵌入的文档。 这是我正在处理的文档的部分架构。
{
...
dlist_solo: {
...
docId: string;
}[]
...
}
dlist_solo 字段是一个嵌入文档数组,其中嵌入文档的 docId 作为字符串值。
在某些情况下,我必须使用 updateOne 方法和 updateMany 方法。
someCollection.updateOne(
{
id: {
$eq: someId
}
},
{
$pull: {
dlist_solo: {
docId: {
$in: docIds
}
}
}
}
)
这适用于打字稿警告并按我的预期运行。但是当我使用相同的过滤器并使用 UpdateMany 操作符更新文档时,它显示一个错误并且无法编译它。我查看了 mongodb.d.ts 文件,它们在两种方法(updateOne 和 UpdateMany)中都使用了相同的 UpdateFilter 类型。
someCollection.updateMany(
{
id: {
$in: someIds
}
},
{
$pull: {
dlist_solo: {
docId: {
// $in is underlined red and says:
// Type 'string[]' is not assignable to type 'never'
$in: docIds
}
}
}
}
)
此外,任何试验都会给我红色下划线。 这是我的编辑器的快照。 same filter and update document, different result
谁能知道我做错了什么?
+
我还使用了 arrayFilters 选项,认为它可能有帮助但不起作用。