Vì vậy, giả sử chúng ta có những thứ sau trong bộ sưu tập cơ sở dữ liệu:
> db.couponmodel.find()
{ "_id" : "a" }
{ "_id" : "b" }
{ "_id" : "c" }
{ "_id" : "d" }
và chúng tôi muốn tìm kiếm các id sau trong bộ sưu tập
var coupons_ids = ["c", "a" ,"z"];
Sau đó, chúng tôi sẽ phải xây dựng trạng thái chiếu động để chúng tôi có thể chiếu các chỉ mục chính xác, vì vậy chúng tôi sẽ phải ánh xạ mỗi id với chỉ mục tương ứng của nó
var conditions = coupons_ids.map(function(value, index){
return { $cond: { if: { $eq: ['$_id', value] }, then: index, else: -1 } };
});
Sau đó, chúng tôi có thể đưa nó vào đường dẫn tổng hợp của chúng tôi
db.couponmodel.aggregate([
{ $match : { '_id' : { $in : coupons_ids } } },
{ $project: { indexes : conditions } },
{ $project: {
index : {
$filter: {
input: "$indexes", as: "indexes", cond: { $ne: [ "$$indexes", -1 ] }
}
}
}
},
{ $unwind: '$index' }
]);
Chạy phần trên bây giờ sẽ xuất ra từng _id và chỉ mục tương ứng của nó trong coupons_ids
mảng
{ "_id" : "a", "index" : 1 }
{ "_id" : "c", "index" : 0 }
Tuy nhiên, chúng tôi cũng có thể thêm nhiều mục hơn vào đường dẫn ở cuối và tham chiếu $index
để có được chỉ mục phù hợp hiện tại.