【问题标题】:Node js asynchronous mongodb find() query multiple callsNode js异步mongodb find()查询多次调用
【发布时间】:2016-12-19 01:42:37
【问题描述】:

我使用

获取记录

find().toArray()

查询。在该记录中,存在其他文档(表)的关系 ID。我想获取上述查找查询结果的每条记录的关系表记录。 喜欢:

   db.collection('serviceBooking').find({'request_to_sp_user_id': docs._id.toString()}).toArray(function (err, serviceBookingDocs) {
        if (serviceBookingDocs.length) {
            var asyncCalls = [];
            serviceBookingDocs.forEach(function (bookingRecord, key) {
                var temp = {};
                temp.userDetails = {};
                //Async call for getting the user details for all users
                asyncCalls.push(function (callback) {
                    db.collection('userDetails').findOne({'user_id': new mongo.ObjectID(bookingRecord.booked_by_user_id)}, function (err, userDetailsDocs) {
                        db.collection('serviceBookingDetails').find({'serviceBookingId': bookingRecord._id.toString()}).toArray(function (err, bookingDetailsDocs) {
                            if (userDetailsDocs) {
                                if (bookingDetailsDocs.length) {
                                    temp.bookingDetails = bookingDetailsDocs;
                                    bookingDetailsDocs.forEach(function (bookDetailItems, key) {
                                        db.collection('serviceCatalog').findOne({'_id': new mongo.ObjectID(bookDetailItems.catalogId), isDeleted: 0}, function (err, spCatalogs) {
                                            db.collection('spServiceCatalog').findOne({'_id': new mongo.ObjectID(spCatalogs.serviceCategory)}, function (err, spServiceCatalogDocs) {
                                                if (spCatalogs) {
                                                    (spServiceCatalogDocs)
                                                    spCatalogs.catalogName = spServiceCatalogDocs.name;
                                                    temp.bookingDetails[key].serviceCatalgs = spCatalogs;
                                                } else {
                                                    spCatalogs.catalogName = null;
                                                    temp.bookingDetails[key].serviceCatalgs = spCatalogs;
                                                }
                                                    callback(null, temp);
                                            })
                                        })
                                    })
                                }
                            } else {
                                callback(null, null);
                            }
                        })
                    })
                })
            })
        }
    })

我尝试使用回调函数,但它没有从 mainCategory 文档中获取类别名称的值。 我还尝试在 forEach() 之外获取内部获取的类别名称,但它没有得到 temp 数组的结果。

【问题讨论】:

    标签: node.js mongodb asynchronous


    【解决方案1】:

    This may help you.

    它说.. 函数是 javascript 上唯一“包围”范围的东西。

    这意味着你的内部回调函数中的变量项在外部范围是不可访问的。

    您可以在外部范围内定义一个变量,以便所有内部范围都可以看到它:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 2016-07-25
      • 2018-10-27
      • 2015-08-04
      相关资源
      最近更新 更多