[英]How to save the Object returned from the query.exec() function in mongoose
我是貓鼬的新手。 這是我的場景:
var childSchema = new Schema({ name: 'string' });
var parentSchema = new Schema({
children: [childSchema]});
var Parent = mongoose.model('Parent', parentSchema);
假設我已經創建了一個帶有子項的父級'p',我正在查詢'p',使用
var query = Parent.find({"_id":"562676a04787a98217d1c81e"});
query.select('children');
query.exec(function(err,person){
if(err){
return console.error(err);
} else {
console.log(person);
}
});
我需要訪問異步函數之外的person對象。 有關如何做到這一點的任何想法?
Mongoose的find()
方法是異步的 ,這意味着你應該使用一個可以從find()
方法包裝查詢的回調。 例如,在您的情況下,您可以將回調定義為
function getChildrenQuery(parentId, callback){
Parent.find({"_id": parentId}, "children", function(err, docs){
if (err) {
callback(err, null);
} else {
callback(null, docs);
}
});
}
你可以這樣調用:
var id = "562676a04787a98217d1c81e";
getChildrenQuery(id, function(err, children) {
if (err) console.log(err);
// do something with children
children.forEach(function(child){
console.log(child.name);
});
});
您可以采用的另一種方法是exec()
方法返回Promise的promises,因此您可以執行以下操作:
function getChildrenPromise(parentId){
var promise = Parent.find({_id: parentId}).select("children").exec();
return promise;
}
然后,當您想要獲取數據時,您應該將其設為異步:
var promise = getChildrenPromise("562676a04787a98217d1c81e");
promise.then(function(children){
children.forEach(function(child){
console.log(child.name);
});
}).error(function(error){
console.log(error);
});
你不能在回調之外訪問它(=你提到的“異步函數”)。 這就是node.js的工作原理:
但是......擁抱異步編程:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.