从两个mongo集合中搜索

时间:2016-03-21 13:37:30

标签: node.js

我正在研究MEAN堆栈应用程序。在我的项目中有一个表单,其中有七个字段.7个字段中有3个来自dept集合,4个来自用户集合。当我们只搜索一个字段时,然后没有问题。但是当我们从不同的集合中分别找到两个文本字段时,它会显示不正确的数据。我们知道在mongo db中没有连接操作。我们如何加入两个集合? 请帮我!!! 让我们假设,这些是我形式的七个领域。

单位名称: 卖方名称: 码: 客户号码: 地址: 状态 taxid:

在上面的列表中,单位名称,卖家名称和代码来自办公室集合。客户编号,地址,状态,出租车来自数据收集。 现在我正在尝试搜索状态为“active”的单位名称。所以,现在我正在尝试从办公室集合中搜索,然后在数据收集中使用id。

请告诉我如何在mongodb中执行join。如何在mongodb中执行join操作。

 if (string.$and.length > 0) {
                office.find(string).exec(function(err, office) {
                    if (err) {
                        return next(err);
                    } else {

                        for (var i = 0; i < office.length; i++) {
                            ids.push(office[i]._id);

                        }
                        string.$and.push({
                            $or: [{
                                data_id: {
                                    "$in": ids
                                }
                            }
                            }]
                        });
                        if (string1.$and.length > 0) {
                            data.find(string).populate('data_id').exec(function(err, data) {
                                if (err) {
                                    return next(err);
                                } else {

                                    res.json(data);
                                }
                            });
                        } else {
                                                      data.find({
                                $or: [{
                                    data_id: {
                                        "$in": ids
                                    }
                                }, {
                                    data_nu: {
                                        "$in": data_nu
                                    }
                                }]
                            }).populate('data_id').exec(function(err, data) {
                                if (err) {
                                    return next(err);
                                } else {

                                    res.json(data_id);
                                }
                            });
                        }
                    }
                });
            } else {
                data.find(string).exec(function(err, data) {
                    if (err) {
                        console.log(err);
                        return next(err);
                    } else {

                        for (var i = 0; i < data.length; i++) {
                            ids.push(data[i].data_id);
                            data_nu.push(data[i].data_nu);
                        }

                        if (string.$and.length > 0) {
                            office.find({
                                $and: [{
                                    $or: [{
                                        id: {
                                            "$in": ids
                                        }
                                    }, {
                                        data_nu: {
                                            "$in": data_nu
                                        }
                                    }]
                                }, string]
                            }).populate('dataId').exec(function(err, datad) {
                                if (err) {
                                    return next(err);
                                } else {

                                    res.json(datad);
                                }
                            });
                        } else {
                            datad.find({
                                $or: [{
                                    id: {
                                        "$in": ids
                                    }
                                }, {
                                    data_nu: {
                                        "$in": data_nu
                                    }
                                }]
                            }).populate('dataId').exec(function(err, datad) {
                                if (err) {
                                    return next(err);
                                } else {

                                    res.json(datad);
                                }
                            });
                        }
                    }
                });
            }

1 个答案:

答案 0 :(得分:0)

mongoDB更喜欢有关一个主题的所有信息都在一个集合中。正如你所说,mongoDB中没有任何加入, 尝试在MongoDB中加入会破坏使用MongoDB的目的。您可以使用DBref并编写应用程序级代码(或库),以便它自动为您提取这些引用。

或者您可以更改架构并使用embedded documents

您最后的选择是完全按照现在的方式保留事物并进行两次查询。