2017-09-13 159 views
0

我已经动态地创建了一些字段(它们不在我的模型中)。我发现我的收藏COLLECTION.findById .....mongoDB动态创建字段

如果我想获得路径,它不显示动态创建的路径。

console.log(result); 

{ lv: { name: 'List vlastníctva', exist: false }, 
    projekt: { name: 'Projektová dokumentácia', exist: false }, 
    uzemne_rozhodnutie: { name: 'Územné rozhodnutie', exist: true }, 
    complete: false, 
    sctcst: { name: 'ščťčšť', exist: false }, 
    ctyzy: { name: 'čťýžý', exist: false }, 
    cssczz: { name: 'čšščžž', exist: false }, 
    __v: 0, 
    _id: 59b916633d77c1cf2958f007 } 

console.log(Object.keys(result.schema.paths)); 

[ 'lv.name', 
    'lv.exist', 
    'projekt.name', 
    'projekt.exist', 
    'uzemne_rozhodnutie.name', 
    'uzemne_rozhodnutie.exist', 
    'complete', 
    '_id', 
    '__v' ] 

console.log(result.lv); 
{ name: 'List vlastníctva', exist: true } 

console.log(result.cssczz); 
undefined 

在Object.keys中不是动态创建的字段。

command line + Robo 3T

我解决不了。在数据库中,它看起来是正确保存的。

感谢

+0

咦?屏幕截图的右侧部分清楚地显示了这些添加的字段。 –

+0

是的,但我无法获取该域的路径....只有在模型中定义的域的路径 –

回答

0

试试这个:

result.get('cssczz', mongoose.Schema.Types.Object) 

如果你想取回未在架构中定义的,你需要告诉它的预期类型字段。

或者,这也可以工作:

var resultAsObject = result.toObject(); 
console.log(resultAsObject.csszz); 

每次你正在尝试从猫鼬对象一定的价值它会检查模式定义,以确保值将有正确的类型。要检索不在模式中的属性,您需要告诉猫鼬它的类型是什么,或者首先将猫鼬对象转换为纯JS对象。

文档: http://mongoosejs.com/docs/api.html#document_Document-get http://mongoosejs.com/docs/api.html#document_Document-toObject