【问题标题】:Get query result preserved in the same order of query array for $in operator in mongodb [duplicate]获取与mongodb中$ in运算符的查询数组顺序相同的查询结果[重复]
【发布时间】:2017-01-14 06:06:50
【问题描述】:

我有一个 productIds 数组和一个 Product 集合。我要查询产品集合 对于 productIds 数组中的所有产品,但我希望结果与 的顺序相同 查询数组。 productsIds 使用其他参数按排序顺序排列 在 Products 集合中的文档中可用,因此 我不能对产品集合使用排序有没有办法保留订单? 示例:

productIds: [362,128,4783,1,44]

db.collection('products'). find({id:{$in:productIds}}).toArray()之后 我希望文件按照 productIds 的顺序排列 目前我收到了不同的订单。

【问题讨论】:

    标签: node.js mongodb mongoose database nosql


    【解决方案1】:

    您有两个简单的选择:

    1) 在内存中排序

    const productIds = [362,128,4783,1,44];
    const idAscending = (a, b) => productIds.indexOf(a.id) > productIds.indexOf(b.id);
    
    db.collection('products').find({ id:{ $in:productIds } }).toArray()
    .then(products => products.sort(idAscending));
    

    2) 进行单独的查询

    const Promise = require('bluebird');
    const productIds = [362,128,4783,1,44];
    
    Promise.map(productIds, db.collection('products').findOne);
    

    【讨论】:

    • 我选择了内存排序和我自己的分页。无​​论如何谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多