Javascript MongoDB加入/更新

Javascript MongoDB加入/更新,javascript,mongodb,Javascript,Mongodb,我想了解您对我建立的流程的看法: 我有两个收藏: 客户端:{client\u id,client\u type} 订单:{订单id,客户id,订单金额,订单有效} 基于这些集合,除其他外,我想计算按客户类型划分的有效订单数 因此,我想加入这两个集合,并将client_类型添加到我的orders集合中 我是这样做的,但我觉得这个解决方案不是很有效 db.clients.find ( {}, { client_id : 1, client_type :

我想了解您对我建立的流程的看法:

我有两个收藏:

客户端:{client\u id,client\u type}

订单:{订单id,客户id,订单金额,订单有效}

基于这些集合,除其他外,我想计算按客户类型划分的有效订单数

因此,我想加入这两个集合,并将client_类型添加到我的orders集合中

我是这样做的,但我觉得这个解决方案不是很有效

db.clients.find (
    {},
    {
        client_id : 1,
        client_type : 1
    }   
).forEach(function (pClient) {
        
    db.orders.update (
        {
            client_id : pClient.client_id
        },
        { $set : {
            client_type : pClient.client_type
            
        }}, 
        { 
            multi : true
        }
    )
});

您知道如何改进此过程吗?

因此,这是我找到的最快的解决方案:

var bulk = db.orders.initializeUnorderedBulkOp();
var bulk_counter = 0;

db.clients.find (
    {},
    {
        client_id : 1,
        client_type : 1
    }   
).forEach(function (pClient) {
    bulk.find(
        {
            client_id : pClient.client_id
        }
    ).update(
        { $set : {
             client_type : pClient.client_type
        }}, 
    )

    bulk_counter++;
    if (bulk_counter % 1000 == 0) 
    {
        bulk.execute();
        bulk = db.m_recipient_indicators.initializeUnorderedBulkOp();
        }
});

if (bulk_counter % 1000 != 0) 
{ 
    bulk.execute(); 
}

这是我找到的最快的解决方案:

var bulk = db.orders.initializeUnorderedBulkOp();
var bulk_counter = 0;

db.clients.find (
    {},
    {
        client_id : 1,
        client_type : 1
    }   
).forEach(function (pClient) {
    bulk.find(
        {
            client_id : pClient.client_id
        }
    ).update(
        { $set : {
             client_type : pClient.client_type
        }}, 
    )

    bulk_counter++;
    if (bulk_counter % 1000 == 0) 
    {
        bulk.execute();
        bulk = db.m_recipient_indicators.initializeUnorderedBulkOp();
        }
});

if (bulk_counter % 1000 != 0) 
{ 
    bulk.execute(); 
}

最好将所有内容都放在一个文档中。{客户端id;客户端类型,{订单id,订单金额,订单有效}。然后您可以使用聚合框架。集合顺序和客户端是从外部文件加载的,我不能这样做。如果使用MongoDB 3.2对同一数据库中的另一个集合进行左外部联接,以过滤“联接”集合中的文档进行处理。不幸的是,我使用的是MongoDB 2.6,
$lookup
不可用请让我猜猜,集合中的数据跨度达数百万?您可以使用批量api来更新集合。最好将所有内容放在一个文档中。{客户端id;客户端类型,{订单id,订单金额,订单有效}。然后您可以使用聚合框架。集合顺序和客户端是从外部文件加载的,我不能这样做。如果使用MongoDB 3.2对同一数据库中的另一个集合进行左外部联接,以过滤“联接”集合中的文档进行处理。不幸的是,我使用的是MongoDB 2.6,
$lookup
不可用请让我猜猜,集合中的数据跨度达数百万?您可以使用批量api来更新集合。