Javascript 节点js Array.push()无法使用mongoose
我是meanstack开发的初学者。我试图在foreach循环中的数组内推送值,但最后得到的是空数组 我的代码:Javascript 节点js Array.push()无法使用mongoose,javascript,arrays,mongoose,nodes,mean-stack,Javascript,Arrays,Mongoose,Nodes,Mean Stack,我是meanstack开发的初学者。我试图在foreach循环中的数组内推送值,但最后得到的是空数组 我的代码: router.get("/", function(req, res) { ourpackage.find({}).sort({_id:1}).exec(function(err,resdoc){ var rest = []; resdoc.forEach(function(doc){ masterRoomimage.find({ourpackageId:doc.
router.get("/", function(req, res) {
ourpackage.find({}).sort({_id:1}).exec(function(err,resdoc){
var rest = [];
resdoc.forEach(function(doc){
masterRoomimage.find({ourpackageId:doc._id},function(err,ourpackageimagevalue){
if(err) res.send(err);
var ourpackagedetail = JSON.parse(JSON.stringify(doc));
var stringifyimages = JSON.parse(JSON.stringify(ourpackageimagevalue));
var ourpackage = _.merge({},ourpackagedetail,{masterRoomimages:stringifyimages});
rest.push(ourpackageimagevalue);
//print all rest array value
console.log(rest);
});
});
//print empty rest array value
console.log(rest);
res.send(rest);
});
});
我们的包模式
{
"_id": "58e396d4215bc61338d2c06e",
"first_title": "test 1",
"berief_text": "<p>testing </p>",
}
预期产量
[
{
"_id": "58e396d4215bc61338d2c06e",
"first_title": "test 1",
"berief_text": "<p>testing </p>",
"ourpackagesimages": [
{
"_id": "59424d49fcc8100050916bf4",
"imageLocation": "first.jpg",
"ourpackageId": "58e396d4215bc61338d2c06e",
"__v": 0
},
{
"_id": "59490ad44e26c13324906433",
"imageLocation": "second.jpg",
"ourpackageId": "58e396d4215bc61338d2c06e",
"__v": 0
}
]
}
]
不能在同步函数中调用异步函数(在本例中为forEach)。结果在收集之前就被访问了,这就是空数组输出的原因 为此目的,有一个非常方便且易于使用的库。对于您的特定用例,或函数就可以了
var async = require('async');
router.get("/", function(req, res) {
ourpackage.find({}).sort({
_id: 1
}).exec(function(err, resdoc) {
async.mapLimit(resdoc, 5, function(doc, callback){
masterRoomimage.find({
ourpackageId: doc._id
}, function(err, ourpackageimagevalue) {
if (err) return callback(err);
var ourpackagedetail = JSON.parse(JSON.stringify(doc));
var stringifyimages = JSON.parse(JSON.stringify(ourpackageimagevalue));
var ourpackage = _.merge({}, ourpackagedetail, {
masterRoomimages: stringifyimages
});
return callback(null, ourpackageimagevalue);
});
}, function(err, rest) {
if(err){
res.send(err);
}
else{
res.send(rest);
}
});
});
});
不能在同步函数中调用异步函数(在本例中为forEach)。结果在收集之前就被访问了,这就是空数组输出的原因 为此目的,有一个非常方便且易于使用的库。对于您的特定用例,或函数就可以了
var async = require('async');
router.get("/", function(req, res) {
ourpackage.find({}).sort({
_id: 1
}).exec(function(err, resdoc) {
async.mapLimit(resdoc, 5, function(doc, callback){
masterRoomimage.find({
ourpackageId: doc._id
}, function(err, ourpackageimagevalue) {
if (err) return callback(err);
var ourpackagedetail = JSON.parse(JSON.stringify(doc));
var stringifyimages = JSON.parse(JSON.stringify(ourpackageimagevalue));
var ourpackage = _.merge({}, ourpackagedetail, {
masterRoomimages: stringifyimages
});
return callback(null, ourpackageimagevalue);
});
}, function(err, rest) {
if(err){
res.send(err);
}
else{
res.send(rest);
}
});
});
});
简单地说,
声明数组
剩余=[]
rest[] = ourpackageimagevalue;
我希望这有帮助,简单地说,
声明数组
剩余=[]
rest[] = ourpackageimagevalue;
我希望它能有所帮助,请小心:
forEach
是同步的,而find
是异步的。我认为如图所示使用aggregate
可能对您有用。请注意:forEach
是同步的,而find
是异步的。我认为使用如图所示的aggregate
可能对您有用。我得到了错误SyntaxError:Unexpected token]我得到了错误SyntaxError:Unexpected token]Hi username:@TalhaAwan我了解异步和同步函数上述任何其他解决方案都提到了用于合并两个集合的输出(我们的套餐系列和套餐图像系列)@Senthil,你在问另一个问题吗?很抱歉,我没听懂。请详细说明。谢谢你的快速回复。上面我提到了1.ourpackages模式,2.ourpackageimages模式,最后我想要预期的输出。嗨,用户名:@TalhaAwan我了解异步和同步函数。上面提到的任何其他用于合并的解决方案的输出两个集合(我们的软件包集合和我们的软件包图像集合)@Senthil,你在问另一个问题吗?很抱歉,我没听懂。请你详细说明一下。谢谢你的快速回复。上面我提到了1.ourpackages模式,2.ourpackageimages模式,最后我想要预期的输出。