首先,我是MEAN Stack和Node.js的新手,所以对我很轻松:)
我知道Node.js中的所有这些函数都是回调函数并且是异步的,但是由于Node.js被广泛使用,我认为作为一个缺点可能并不是一个缺点。让我来定义我的问题;
假设您有一个用户的架构,其中一个字段是对另一个架构的引用。 e.g。
PersonSchema = {
name: String,
...
...
...
projects : [{
type: Schema.ObjectId,
ref: 'Project',
required: true
}],
...
...
}
如何确保从数据库中获取特定项目并使用mongoose添加到用户的数据库中?
我正在做的是:
var proj = Project.findOne({"name":"The Manhattan Project"})
由于这些都发生在app.post(...)方法中,它们最终会发生,但不一定是在它们应该发生的时候。
var newUser = new User();
newUser.name = req.body.name;
newUser... = ...
newUser.projects = [proj.id];
...
newUser.save(callback function{})
当我用这个项目保存新的User对象时,它给了我一个错误,因为proj是未定义的(这是可以理解的,因为查询函数是一个回调函数)买我真的不知道现在解决这个问题。
有人可以告诉我如何解决这个问题,或者修正我的理解方式,如果这是错误的,或者至少让我朝着正确的方向前进,这样我就可以通过研究找到更多的资源。
非常感谢!
答案 0 :(得分:0)
FindOne将回调作为其第二个参数。你不应该将项目分配给它的返回,你应该只是调用它,然后在回调中继续你的使用逻辑......
Model.findOne({ age: 5}, function (err, doc){
// doc is a Document
// do things that happen after a sync retrieve in here...
});