![](/img/trans.png)
[英]How do i send array values from angular controller to node and using that array values i have to search result from mongoDB
[英]How to get result from passing array in mongodb?
我有一個數組,使用這個數組我想搜索一些產品。 如下所示的數組。
"productIds": [
{
"productId": ObjectId("574592dfc07f13943255c19d")
},
{
"productId": ObjectId("5745934cc07f13943255c19f")
},
{
"productId": ObjectId("57459397c07f13943255c1a1")
}
]
使用這個productId
我想搜索特定的產品。 我已經寫了一些查詢,但是只接受第一個productId
,而沒有剩余。
router.post('/getItemOfWishList', function(req,res){
var wId = ObjectId(req.body.wID);
var findwishlists = function(db, callback) {
var cursor =db.collection('wishlists').find({_id: wId}).toArray(function(err, docs){
if(err){
callback(new Error("Some problem"));
}else{
callback(null,docs);
}
});
};
MongoClient.connect(config.database, function(err, db) {
assert.equal(null, err);
findwishlists(db, function(err,docs) {
db.close();
//console.log(docs[0].productIds);//It contains that array.
for(var key in docs){
console.log(docs[key].productIds[key].productId);
var pID = ObjectId(docs[key].productIds[key].productId);
var findproducts = function(db, callback) {
var cursor =db.collection('proInfo').find({_id: pID}).toArray(function(err, docs){
if(err){
callback(new Error("Some problem"));
}else{
callback(null,docs);
}
});
};
MongoClient.connect(config.database, function(err, db) {
assert.equal(null, err);
findproducts(db, function(err,docs) {
db.close();
if(err) return res.json({result:null})
else
return res.json({result: docs});
});
});
}
});
});
});
這里有幾個問題:
該方案的異步流是不正確-在for
語句啟動了一堆的異步任務,你是不是在等待他們全部完成。
您將在收到第一個結果后立即將響應發送回-首次調用findProducts
將在寫響應。
您可以使用$in
MongoDb運算符解決所有這些問題:
MongoClient.connect(config.database, function(err, db) { db.collection('wishlists').find({_id: wId}).toArray(function(err, wishlist) { var productIds = wishlist.productIds.map(function(product) { return product.productId; }); db.collection('products').find({_id: {$in: productIds}}).toArray(function (err, products) { return res.json(products); }); }); });
當然,您應該處理所有意外的錯誤並重新整理代碼段,以使其更適合您的情況。
我還建議您多讀一點有關node.js如何處理異步工作和流控制的信息,因為您假設所有代碼將同步完成-一個接一個。 一個不錯的起點是: https : //blog.risingstack.com/node-hero-async-programming-in-node-js/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.