在mongodb中以$ in运算符的查询数组的相同顺序保存查询结果

时间:2016-09-06 17:35:32

标签: node.js mongodb mongoose database nosql

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

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

db.collection('products'). find({id:{$in:productIds}}).toArray()之后 我希望文档的顺序与productIds的顺序相同 目前我的订单不同。

1 个答案:

答案 0 :(得分:0)

您有两个简单的选择:

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);