【发布时间】:2016-02-27 15:01:23
【问题描述】:
我正在使用以下架构,我在这里只展示了相关部分:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var punchSchema = new Schema({punch: Date});
/**
* Child Schema
*/
var ChildSchema = new Schema({
punchesIn: [punchSchema]
});
mongoose.model('Child', ChildSchema);
我想要完成的是能够获取一个子文档,并从一个 javascript 数组中更新 punchesIn 字段。所以如果我有:
Child1{
_id: XYZ
punchesIn: [Date1, Date2, Date3]
}
jsArray = [Date4, Date2, Date5]
我将能够运行更新,Child1 将变为:
Child1{
_id: XYZ
punchesIn: [Date4, Date2, Date5]
}
这是我尝试的简化版本,实际实现没有语法错误,这只是为了展示:
Child.findById(XYZ, function(err, child) {
var query = {'_id': XYZ };
var update = { $set: {
punchesIn: jsArray
},
};
var options = { new: true };
Child.findOneAndUpdate(query, update, options, function(err, child) {
if (err) {
console.log('got an error');
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
}
});
运行此代码(我知道它适用于文档中的非数组字段)会导致以下错误:
500 TypeError: Cannot use 'in' operator to search for '_id' in punchesIn
据我所知,这是因为 punchesIn 是 MongooseDocumentArray 类型,而 jsArray 只是一个 javascript 数组。
是否可以运行某种循环来创建 MongooseDocumentArray,其中不同的字段是 jsArray 中找到的日期的文档版本?
【问题讨论】:
标签: javascript arrays mongodb mongoose mongodb-query