我想根据其中的 sort_order 键更改幻灯片子文档中对象的顺序。
例如:我想将标题为 A3 的幻灯片移到 A2 上方。 IE。 A3(3)的sort_order
值改为2,A2的将改为 3,向下移动则反之。
怎么办??
下面是数据库对象。
{
"_id" : ObjectId("5a3b8cc68884dd1140a9a5b8"),
"title" : "Sort Test",
"user_id" : ObjectId("59e08e45f081170f582e95cc"),
"status" : "active",
"slides" : [
{
"_id" : ObjectId("5a3b8cc68884dd1140a9a5b9"),
"sort_order" : 0,
"content" : "Sort Test",
"title" : "Sort Test"
},
{
"_id" : ObjectId("5a3b8cda8884dd1140a9a5ba"),
"sort_order" : 1,
"content" : "Text Contents here...",
"title" : "A1"
},
{
"_id" : ObjectId("5a3b8ce48884dd1140a9a5bb"),
"sort_order" : 2,
"content" : "Text Contents here...",
"title" : "A2"
},
{
"_id" : ObjectId("5a3b8cec8884dd1140a9a5bc"),
"sort_order" : 3,
"content" : "Text Contents here...",
"title" : "A3"
},
{
"_id" : ObjectId("5a3b8cec8884dd1140455bc"),
"sort_order" : 4,
"content" : "Text Contents here...",
"title" : "A4"
}
],
"description" : "Sort Test",
"__v" : 0
}
最佳答案
使用此方法,您可以创建一个包含相同元素的新数组,并交换您要求的元素(我想这就是您要求的)。 然后你只需要用新数组更新数据库中的幻灯片字段。
var dbObject = {
"_id" : ObjectId("5a3b8cc68884dd1140a9a5b8"),
"title" : "Sort Test",
"user_id" : ObjectId("59e08e45f081170f582e95cc"),
"status" : "active",
"slides" : [
{
"_id" : ObjectId("5a3b8cc68884dd1140a9a5b9"),
"sort_order" : 0,
"content" : "Sort Test",
"title" : "Sort Test"
},
{
"_id" : ObjectId("5a3b8cda8884dd1140a9a5ba"),
"sort_order" : 1,
"content" : "Text Contents here...",
"title" : "A1"
},
{
"_id" : ObjectId("5a3b8ce48884dd1140a9a5bb"),
"sort_order" : 2,
"content" : "Text Contents here...",
"title" : "A2"
},
{
"_id" : ObjectId("5a3b8cec8884dd1140a9a5bc"),
"sort_order" : 3,
"content" : "Text Contents here...",
"title" : "A3"
},
{
"_id" : ObjectId("5a3b8cec8884dd1140455bc"),
"sort_order" : 4,
"content" : "Text Contents here...",
"title" : "A4"
}
],
"description" : "Sort Test",
"__v" : 0
}
var slides = dbObject.slides;
var switchElementsInArray = function(array, sortOrder1, sortOrder2) {
var newArray = [];
for(var element of array) {
if(element.sort_order === sortOrder1) {
newArray.push(elem2);
} else if(element.sort_order === sortOrder2) {
newArray.push(elem1);
} else {
newArray.push(element);
}
}
return newArray;
}
var newSlides = switchElementsInArray(slides, 2, 3);
关于javascript - 使用 mongo 集合对象中的元素键更改对象数组中对象的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47924621/