繁体   English   中英

使用Node.js和Mongoose将查询结果保存到Model / Schema的属性

[英]Saving the result of a query to a property of a Model/Schema with Node.js and Mongoose

首先,我是MEAN Stack和Node.js的新手,所以对我很轻松:)

我知道Node.js中的所有这些函数都是回调函数并且是异步的,但是由于Node.js被广泛使用,我认为作为一个缺点可能并不是一个缺点。 让我来定义我的问题;

假设您有一个用户的Schema,其中一个字段是对另一个模式的引用。 例如

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是未定义的(这是可以理解的,因为查询函数是一个回调函数)买我真的不知道现在解决这个问题。

有人可以给我一些如何解决这个问题的想法,或者修正我的理解方式,如果它是错的,或者至少把我推向正确的方向,这样我就可以通过研究找到更多的资源。

非常感谢!

FindOne将回调作为其第二个参数。 你不应该将项目分配给它的返回,你应该只是调用它,然后在回调中继续使用你的逻辑...

Model.findOne({ age: 5}, function (err, doc){
    // doc is a Document
    // do things that happen after a sync retrieve in here...
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM