MongoDB-从Javascript数组创建MongooseDocumentArray
MongoDB - Create MongooseDocumentArray from Javascript Array
我正在使用以下模式,这里只显示了相关部分:
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数组转换为Punch模型实例的数组,因为这是Child模式所期望的。这里有一个功能:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
var punchSchema = new Schema({punch: Date});
var childSchema = new Schema({
punchesIn: [punchSchema]
});
var Child = mongoose.model('Child', childSchema);
var Punch = mongoose.model('Punch', punchSchema);
function createPunchList(inArr){
var outArr = [];
for (var i=0;i<inArr.length;i++){
var punch = new Punch({
date: inArr[i]
});
outArr.push(punch);
}
return outArr;
}
//test data
for (var i=0;i<10;i++){
var newChild = new Child({
punchesIn: createPunchList([new Date(), new Date(), new Date()])
});
newChild.save();
}
Child.find({}, function(err, c){
console.log(c);
});
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- 在动态创建的元素上获取对特定选择器的引用
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- 如何创建JSON数组
- 从html创建一个指令,该指令按类名应用函数
- 使用Javascript创建测验页面
- 更改使用Chart.js创建的图表中的轴线颜色
- JavaScript名称空间和对象创建
- JQuery对动态创建的对象进行选择
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 使用jQuery从原始页面内容创建iframe