MongoDB обновляет $ push с $ sort до массива массивов

Вы можете сделать это динамически ... Вот небольшой пример массива динамических функций, выделенного с помощью malloc ...

#include <stdio.h>
#include <stdlib.h>

typedef void (*FOO_FUNC)(int x);

void a(int x)
{
    printf("Function a: %d\n", x);
}

void b(int x)
{
    printf("Function b: %d\n", x);
}

int main(int argc, char **argv)
{
    FOO_FUNC *pFoo = (FOO_FUNC *)malloc(sizeof(FOO_FUNC *) * 2);
    pFoo[0] = (FOO_FUNC)&a;
    pFoo[1] = (FOO_FUNC)&b;

    pFoo[0](10);
    pFoo[1](20);

    return 0;
}
2
задан Chris 13 July 2018 в 05:32
поделиться

2 ответа

Это коллекция ArrayTest, созданная с вашими примерными данными:

{
        "_id" : "test",
        "TestArr" : [
                [ 1, 7 ],
                [ 2, 3 ],
                [ 3, 4 ]
        ]
}

Входной агрегатный запрос:

db.ArrayTest.aggregate([
    {
        $match : { "_id" : "test" }
    },
    {
        $unwind : "$TestArr"
    },
    {
        $sort : { "TestArr.1" : 1 }
    },
    {
        $group:{
            _id : "$_id",
            TestArr : {$push:"$TestArr"}
        }
    }
])

Здесь мы сначала используем этап $unwind и затем [[6]]

{
    "_id" : "test",
    "TestArr" : [ 
        [ 2, 3 ],
        [ 3, 4 ],
        [ 1, 7 ]
    ]
}

Это отсортированный массив.

Вывод:

{
    "_id" : "test",
    "TestArr" : [ 
        [ 2, 3 ],
        [ 3, 4 ],
        [ 1, 7 ]
    ]
}

Если обновление & amp; сортировка может быть выполнена отдельно, вы можете сначала вставить новый вспомогательный массив, а затем использовать эту команду для сортировки.

Пожалуйста, попробуйте это и сообщите нам, если это сработало!

0
ответ дан Subhashree Pradhan 17 August 2018 в 13:38
поделиться
  • 1
    Я надеялся сделать это в одном взаимодействии БД с помощью функции сортировки $ Update. Позиция будет работать, но мне нужно будет найти находку, вычислить правильную позицию и затем обновить. Это, вероятно, лучший подход, вставьте все элементы, затем выполните сортировку с помощью агрегата, чтобы размотать, отсортировать, отойти назад в массив и обновить оригинальную запись. – Chris 15 July 2018 в 01:43

Вы можете использовать модификатор $position для $push для определенного индекса

db.ArrayTest.update(
   { _id: "test" },
   {
     $push: {
        TestArr: {
           $each : [[6,3]],
           $position: 1
        }
     }
   }
)
0
ответ дан Anthony Winzlet 17 August 2018 в 13:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: