在 users.js :
中var mongoose = require('mongoose');
var User = mongoose.model('user', {
username: {
type: String,
required: true,
unique: true,
lowercase: true,
},
tasks: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Tasks',
}],
});
module.exports = User;
然后我添加一个名为user1的新用户并保存到mongo。
mongo doc看起来像:
{
"_id" : ObjectId("574fb94f6a1e7d1826c16058"),
"username" : "user1",
"tasks" : [ ],
"__v" : 0
}
然后尝试获取文档,它在此处理程序中正常工作:
在 handlerA.js :
var User = require('../models/users.js');
module.exports.getUser = function(req, res){
User.findOne({username: "user1"}, function(err, data){
if(err){
console.log('getUser err', err);
res.send('ERROR')
} else {
console.log('getUser fx success = ', err, data);
res.send(data)
}
});
};
console.log
:
getUser fx success = null {tasks:[],__ v:0,username:'user1',_ id:574fb94f6a1e7d1826c16058}
但是在另一个处理程序中,相同的代码在单独的文件中失败。
在 handlerB.js :
var User = require('../models/users.js');
module.exports.addStuff = function(req, res){
User.findOne({username: "user1"}, function(err, data){
if(err){
console.log('addStuff err', err);
res.send('ERROR')
} else {
console.log('addStuff fx success =', err, data);
res.send(data)
}
});
};
console.log
:
addStuff fx success null null
尝试......并且失败了......
我还尝试了这个问题的另一个解决方案:Mongoose query return null
Mongoose使模型名称复数化,因此它在“blogposts”集合上运行find而不是“blogpost”。也就是说,你在mongo shell中的查询是在“blogmodel”集合中。在那种情况下:
var BlogModel = mongoose.Model("BlogModel", ..)
或将集合名称作为第三个参数传递:
var BlogModel = mongoose.model("BlogPost", schema, "blogmodel")
此解决方案导致handlerA.js返回null文档以及handlerB.js。
感谢您的时间。非常感谢。
附录。 我在 handlerB.js 中的用户和任务模型下运行了一个find({}) 返回的文档IN BOTH情况基于Tasks模型。 请参阅下面的Console.logs,了解User.find({})和Tasks.find({}) 错误是空值然后是数据。
我破坏了多少东西? Model.find如何返回甚至不在模型中的数据?
User.find({},funtion(err, data) ____________________
console.log of err then data
null
[ { subtasks: [],
team: [ [Object] ],
__v: 0,
maintask: '1',
_id: 574fce63d744cba421f750c1
},
{ subtasks: [],
team: [ [Object] ],
__v: 0,
maintask: '2',
_id: 574fce65d744cba421f750c2
}
]
Tasks.find({},function(err, data) ___________________
console.log of err then data
null
[ { subtasks: [],
team: [ [Object] ],
__v: 0,
maintask: '1',
_id: 574fce63d744cba421f750c1 },
{ subtasks: [],
team: [ [Object] ],
__v: 0,
maintask: '2',
_id: 574fce65d744cba421f750c2
},
]
这是任务模型...... 的 tasks.js
var mongoose = require('mongoose');
var subtaskSchema = new mongoose.Schema({
subtask: {
type: String,
},
team: {
type: Array,
'defualt': [],
},
done: {
type: Boolean,
'defualt': false,
},
});
var Tasks = mongoose.model('tasks', {
maintask: {
type: String,
},
subtasks: {
type: [subtaskSchema],
},
team: {
type: Array,
'defualt': [],
},
done: {
type: Boolean,
'defualt': false,
},
});
module.exports = Tasks;
答案 0 :(得分:0)
mongoose docs建议定义一个这样的模型,你试过这个吗?
var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var Tank = mongoose.model('Tank', schema);