【发布时间】:2016-06-02 17:45:18
【问题描述】:
在 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 文档看起来像:
{
"_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 成功 null null
尝试过....失败了....
我还尝试了这个问题的其他解决方案:Mongoose query return null
Mongoose 将模型名称复数化,因此它在“blogposts”集合而不是“blogpost”上运行 find。也就是说,您在 mongo shell 中的查询位于“blogmodel”集合中。在这种情况下:
var BlogModel = mongoose.Model("BlogModel", ..)
或将集合名称作为第三个参数传递:
var BlogModel = mongoose.model("BlogPost", schema, "blogmodel")
此解决方案导致 handlerA.js 以及 handlerB.js 返回一个空文档。
感谢您的宝贵时间。非常感谢。
附录。 我在 handlerB.js 的 User 和 Tasks 模型下运行了 find({}) 在两种情况下返回的文档都是基于 Tasks 模型的。 有关 User.find({}) 和 Tasks.find({}),请参阅下面的 console.logs 错误是空值,然后是数据。
我把东西弄坏到什么程度? 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;
【问题讨论】:
-
如何调用 addStuff 和 getUser?
-
var express = require('express'); var app = express(); var bodyParser = require('body-parser'); // 数据库 var mongoose = require('mongoose'); mongoose.connect(process.env.MONGOLAB_URI || 'mongodb://localhost/taskmaster');
-
// 处理请求 var handleUsers = require('./server/services/handleUsers.js') app.post('/addUser', handleUsers.addUser); app.get('/getUser/:username', handleUsers.getUser); app.get('/getAllUsers', handleUsers.getAllUsers);
-
var handleTasks = require('./server/services/handleTasks.js') app.post('/addTaskOwner', handleTasks.addTaskOwner); app.put('/addStuff', handleTasks.addStuff);
-
我在 handlerB (有问题的那个)中尝试了 User.find({}, funtion(err, data){......} 并且返回的文档是任务集合!因此 mongo shell 命令 db.tasks.find() 返回与 User.find({}...... 相同的内容
标签: javascript node.js mongodb