【发布时间】:2018-10-02 20:29:11
【问题描述】:
我使用 $[] 进行的更新无法正常工作。架构:
tables: {
type: [
{
tableID: String,
numberOfChairs: Number,
reserved: Boolean,
location: String,
inDoors: Boolean,
reservedDuring: [
{
reservedFrom: Date,
reservedTo: Date,
reservedFor: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Consumer'
}
}
]
}
],
required: false
},
我的更新功能:
TableBooking.updateMany({}, {
'$set': {
'tables.$[].reservedDuring.$[arr].reservedFrom': Date.now()
}
}, { arrayFilters: [{
'arr.reservedFrom': { $gte: Date.now() }
}],
multi: true
}, ).then(function (doc)){}
我的更新函数不断返回 "{"n":2,"nModified":0,"ok":1}"。我不知道为什么该函数拒绝更新数组元素。我有 2 个满足 arrayfliters 条件的文档,但没有任何改变。我正在使用 MongoDB 4.0 和 mongoose 5.2.14 和 @types/mongoose: 5.2.12(我正在使用 TS 编写我的应用程序)。
【问题讨论】:
-
现在无法测试,但认为您错过了 'type' 字段是您的 $set : 'tables.type.$[].reservedDuring...
-
@matthPen 我从未见过这样使用“类型”字段。无论哪种方式,我都尝试了可以想象的每个信号组合,并且每次都得到“{“ok”:0,“n”:0,“nModified”:0}”。我相信 mongodb 正在寻找名为“类型”的字段。
-
但是你有一个名为 type 的字段!根据您的架构,表不是数组,但 tables.type 是一个。我不是在谈论字段的类型
-
对不起,我一开始误会你了。但是我最初的实现结果不应该是“{”ok”:0,”n”:0,”nModified”:0}”吗?无论哪种方式,我都会尝试一下。谢谢。
-
提供样本数据,我可以支持我。从来没有同时测试过 $[] 和 $[placeholder]。
标签: node.js mongodb typescript mongoose