pon*_*cho 2 mongoose mongodb node.js express mongodb-query
我有以下架构:
let User = new Schema({
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
firstName: {
type: String,
required: false
},
lastName: {
type: String,
required: false
},
templates: {
type: Schema.Types.ObjectId,
ref: 'TemplateInstance',
required: false
}
},{
collection: 'users',
timestamps: true
});
Run Code Online (Sandbox Code Playgroud)
以及以下 Mongoose 代码:
exports.getUsers = (req, res) => {
User.find((err, users) => {
if(err)
return res.status(400).json( { 'users_get_all': 'failure', 'err': err } );
return res.status(200).json( { 'users_get_all': 'success', 'users': users } );
});
};
Run Code Online (Sandbox Code Playgroud)
最初,每个用户文档的“模板”字段中没有任何内容,因为在用户创建帐户后,他们就可以将模板附加到该帐户。我已手动将一些模板 ObjectID 添加到某些用户的“模板”字段中,但是当我运行 getUsers() 函数时,会返回用户文档,但没有“模板”字段:
{"users_get_all":"success","users":[{"_id":"5b39f9da294d041b58f97cb3","email":"testemail@email.com","password":"password","firstName":"firstName","lastName":"lastName","createdAt":"2018-07-02T10:09:30.400Z","updatedAt":"2018-07-02T10:21:34.579Z","__v":0},{"_id":"5b39ff5723d93c17bc00eabf","email":"testemail2@email.com","password":"password","firstName":"firstName2","lastName":"lastName2","createdAt":"2018-07-02T10:32:55.308Z","updatedAt":"2018-07-02T10:32:55.308Z","__v":0}]}
Run Code Online (Sandbox Code Playgroud)
如果我在 Studio 3T 之类的东西中查看 MongoDB,模板数组中肯定有引用 Template 集合中的 Templates 的 ObjectID。
知道为什么不返回“模板”字段吗?
按如下方式更新您的架构:
let User = new Schema({
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
firstName: {
type: String,
required: false
},
lastName: {
type: String,
required: false
},
templates: [{
type: Schema.Types.ObjectId,
ref: 'TemplateInstance',
required: false
}]
},{
collection: 'users',
timestamps: true
});
Run Code Online (Sandbox Code Playgroud)
与在数据库中一样,数组中有模板,并且您将其声明为模式中的对象。