Вы можете сделать это динамически ... Вот небольшой пример массива динамических функций, выделенного с помощью 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;
}
Это коллекция 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; сортировка может быть выполнена отдельно, вы можете сначала вставить новый вспомогательный массив, а затем использовать эту команду для сортировки.
Пожалуйста, попробуйте это и сообщите нам, если это сработало!
Вы можете использовать модификатор $position
для $push
для определенного индекса
db.ArrayTest.update(
{ _id: "test" },
{
$push: {
TestArr: {
$each : [[6,3]],
$position: 1
}
}
}
)