【问题标题】:Compare values in two Collections比较两个集合中的值
【发布时间】:2020-04-17 05:10:45
【问题描述】:

我正在使用 Mongo DB。有两个集合main_hikanshoumain_kokyakumain_hikanshou 仅包含一列 - phone_numbermain_kokyaku 包含大约 10 列,其中一列是相同的 phone_number。这两个集合有大约 150000 个值,我想比较这两个集合并以计算光方式获得匹配值的 .csv 输出...

我正在使用这个js 只是为了print 它,但是这样使用它需要很长时间......

var list = []
db.main_hikanshou.find().forEach(function(doc1){
        var doc2 = db.main_kokyaku.findOne({phone_number: doc1.phone_number});
        if (doc2) {
                list.push(doc1);
        }
    });
print(list);

【问题讨论】:

  • 您可以使用$in,这将有助于提高性能。
  • 感谢您的评论,它为所有值返回类似 { "_id" : ObjectId("5e059c3a122f4127b8760e99"), "phone_number" : "54345689", "phoneNumber" : [ ] } 的内容

标签: javascript mongodb collections


【解决方案1】:

您可以使用$in

试试这个:

db.main_hikanshou.find({},{phone_number:1} ).toArray(function (_err, docs) {//get all phone phone numbers
    let phone_numberList = docs.map(v => { return v.phone_number });
    var doc2 = db.main_kokyaku.find({ phone_number: { "$in": phone_numberList } });//search phone 
    print(doc2);
})

【讨论】:

  • 感谢您的评论,上面写着E QUERY [thread1] TypeError: db.main_hikanshou is not a function : @(shell):1:1
  • 谢谢,看来这行得通!顺便提一句。如何将其导出为.csv?抱歉,我是 Mongo 的新手
【解决方案2】:

使用聚合将匹配的phone_number 加入main_hikanshou 集合

db.collection('main_hikanshou').aggregate([
    { $lookup:
        {
           from: 'main_kokyaku',
           localField: 'phone_number',
           foreignField: 'phone_number',
           as: 'phoneNumber'
        }
    }
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多