使用 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 被广泛使用,我认为的缺点可能根本不是缺点。让我定义我的问题;
假设您有一个用户的架构,其一个字段是对另一个架构的引用。例如
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 将回调作为其第二个参数。您不应该将项目分配给它的 return,您应该直接调用它,然后在回调中执行您的使用逻辑...
Model.findOne({ age: 5}, function (err, doc){
// doc is a Document
// do things that happen after a sync retrieve in here...
});
首先,我是 MEAN Stack 和 Node.js 的新手,所以请放轻松 :)
我知道 Node.js 中的所有这些函数都是回调函数并且是异步的,但是由于 Node.js 被广泛使用,我认为的缺点可能根本不是缺点。让我定义我的问题;
假设您有一个用户的架构,其一个字段是对另一个架构的引用。例如
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 将回调作为其第二个参数。您不应该将项目分配给它的 return,您应该直接调用它,然后在回调中执行您的使用逻辑...
Model.findOne({ age: 5}, function (err, doc){
// doc is a Document
// do things that happen after a sync retrieve in here...
});