В массиве элементов массива агрегации из индекса x в y, где x определяется внутри коллекции, а y - элемент массива, соответствующий индексу элемента массива, который сопоставляется. Пожалуйста, смотрите ниже пример, тогда станет легче понять, что я пытаюсь сказать.Как включить внешний массив в агрегацию MongoDB?
купоны коллекция
{"coupon_id": "coupon01", "codes": ["FLAT30", "FLAT50", "FLAT70", "FLAT90"], "curr_index": 0}
Например см ниже примере кода здесь я пытаюсь получить купон коды, начинающиеся с curr_index до (curr_index + п), где п есть число в coupon_ctrs, соответствующий индексу coupons_ids ПРИМЕР- для идентификатора "584559bd1f65d363bd5d25fd"
п равно 1, для идентификатора "58455a5c1f65d363bd5d2600"
п равно 2 и для идентификатора "584878eb0005202c64b0cc5d"
п 3.
coupons_ctrs = [1, 2, 3];
coupons_ids = ["584559bd1f65d363bd5d25fd", "58455a5c1f65d363bd5d2600", "584878eb0005202c64b0cc5d"];
int n = 2;
couponmodel.aggregate(
{ $match : { '_id': { $in : coupons_ids }} },
{ $project: {_id:0, codes : /* How to use slice here so that codes array will be returned between cur_index and (curr_index + coupons_ctr corresponding to the index coupon id is found, example- for _id "584559bd1f65d363bd5d25fd" it should be 1 and so on) */} },
function(err, docs) {
if (err) {
} else {
}
});
UPDATE
Как предложил Styvane, я мог бы использовать $ zip, и он будет работать идеально, но поскольку я использую mongoDB 3.2.11, поэтому я не могу его использовать, так что может быть решением для использования функциональных возможностей $ zip в mongodb 3.2.11 ??
Может кто-нибудь скажет мне, как я могу включить этот массив coupon_ctrs и использовать его внутри конвейера агрегации.
В ваш код, где определено, что для id: «584559bd1f65d363bd5d25fd» n будет 1, я имею в виду, есть ли поручительство, что для каждого идентификатора, который соответствует «n», будет тем же самым элементом индекса в «coupon_ctr». ?? –
@PrakashKumar да, но вам нужно указать индекс элементов «coupons_ids», который должен быть в том же порядке, что и элементы «coupons_ctrs», как вы показали. – styvane
да, это в порядке smae, но как этот код может сделать intenrally, который вы можете объяснить? –