我们有NodeJs后端应用程序,它与mongo数据库交互。
我有严格的模式来检索对象。
NodeJs应用程序使用module.export
技术。
我使用以下依赖项:
"mongoose": "^4.7.8",
"promise": "^8.0.1",
我遵循架构:
account.js
const mongoose = require('mongoose'),
ColumnModel = require('./column');
var AccountModel = new mongoose.Schema({
id: {
type: Number,
required: [true, "ID is required"],
unique: true
},
maxAvailableDate: {
type: Date,
require: [true, "maxAvailableDate is required"]
},
types: {
type: [String],
required: [true, "Log types are required"]
},
metaInfo: {
conversion: {
type: [ColumnModel],
required: [true, "Conversion columns are required"]
},
impression: {
type: [ColumnModel],
required: [true, "Impression columns are required"]
},
clickevent: {
type: [ColumnModel],
required: [true, "Clickevent columns are required"]
}
}
});
column.js
const mongoose = require('mongoose');
module.exports = new mongoose.Schema({
columnName: {
type: String,
required: true
},
columnType: {
type: String,
enum: [
"string",
"date",
"int",
"real"
],
required: true
}
});
然后我使用模型:
const AccountModel = require('./account'),
mongoose = require('mongoose');
let AccountModel = mongoose.model('Account', AccountModel);
AccountModel.findOne(
{id: accountId},
(err, result) => {
let types = result.types;
console.log(result);
}
);
我得到了输出:
{ _id: 5a98116ff7f1e223e5b291fa,
id: 119,
maxAvailableDate: 2018-03-01T14:42:55.262Z,
types: [ 'impression', 'conversion', 'clickevent' ],
metaInfo:
{ conversion:
[ [Object],
[Object] ],
impression:
[ [Object],
[Object] ],
clickevent:
[ [Object],
[Object] ] } }
但types
未定义!
我知道我可以将lean()
与Query
结合起来,但我需要可变的对象,而不仅仅是原始数据。
您可以调用toObject
方法来访问字段。
例:
var data = result.toObject();
console.log(data.types); // "[ 'impression', 'conversion', 'clickevent' ]"
我发现了问题,我没有在accounts.js中使用module.export