当前位置: 首页 > 面试题库 >

如何使用MongoDB更改数组的顺序?

仲孙才捷
2023-03-14
问题内容

我需要能够增加和减少MongoDB对象中数组元素的位置。

<update>在MongoDB
API中
查看了该API,但找不到任何让我这样做的东西。

我正在尝试使用findOneAndUpdate贯通,Mongoose并且我知道要向上或向下移动的元素的索引。

base64编码图像数组项的示例:

{ 
  images: [
    "img1",
    "img2",
    "img3"
  ]
}

我想向上或向下移动“ img2”(但由于无处可去,因此“图像”应该不能向上推)。

如果我想向上推“ img2”,那么结果将是:

{ 
  images: [
    "img2",
    "img1",
    "img3"
  ]
}

通过更改索引,交换或上推/下推来实现此目标都没有关系。


问题答案:

就像@ blakes-seven所说的那样,您有两种方法可以做到:

抓取,更新和推送

db.images.find({ _id: '' }, { images : 1 })
.then(function(img) {
  var tmpImg = img.images[0];
  img.images[0] = img.images[1];
  img.images[1] = tmpImg;

  db.images.update({ _id: img._id }, { $set: { images: img.images } });
})

__使用 $ position* 直接更新 (如果您在客户端上有映像并且知道索引) *

db.images.update({ _id: '' }, { $push: { images: { $each: ['img2'] }, $position: 0 } } } )
.then(function() {
  db.images.update({ _id: '' }, {$unset: {'images.2': 1}})
});

https://docs.mongodb.org/manual/reference/operator/update/position/

但是,我认为您应该重新设计存储图像的方式,例如使用虚拟顺序:

{
  images: [
    { base64: 'img1', order: 0, _id: 'img1' },
    { base64: 'img2', order: 1, _id: 'img2' },
    { base64: 'img3', order: 2, _id: 'img3' }
  ]
}

这样,您可以使用虚拟订单索引对图像进行排序,仅使用_id对其进行更新,或者通过更改所有img2的顺序,删除或替换图像等来更新整个集合。



 类似资料:
  • 问题内容: 我在mongodb中有一个字符串字段。,我想将它们全部转换成数组。 我知道我可以遍历所有文档,获取字段,然后更新,但是我想知道是否有更清洁的方法。 谢谢。 问题答案: 您可以在map / reduce的Reduce函数中进行此操作,以将所有处理保留在mongodb中。本质上,您将使用map / reduce将结果放入新集合中,然后可以将其复制回旧集合(或删除旧集合并重命名新集合)。这具

  • 我有以下(): 我按分配添加更多列: 如何将列移到前面,即将其设置为第一列,其他列的顺序保持不变?

  • 我需要将数组中的值替换为。尝试此操作时,仅显示阵列中的第一条记录。 如何显示数组中的所有条目?

  • 问题内容: 我正在使用MongoDB数据库,该数据库的收集模型包括 班级 , 学生 , 学科 和[学术] 表现 。以下是基于猫鼬的架构和模型: 该集合的文件是最复杂的地段; 示例文档为: 我能够使用以下代码检索现有的班级文档并将其添加到分数中: 但是,如何添加/更新/删除该特定学生的成绩?我需要能够通过以下方式与集合进行交互: 检索所有学生或特定学生的分数(检索数组中的特定元素) 为特定主题添加/

  • 问题内容: 我有以下: 我通过分配添加了更多列: 如何将列mean移到最前面,即将其设置为第一列,而其他列的顺序保持不变? 问题答案: 你还可以执行以下操作: 你可以通过以下方式获取列列表: 输出将产生: …然后轻松将其放到第一个功能中即可手动重新排列

  • 问题内容: 我正在尝试更新嵌套数组中的值,但无法使其正常工作。 我的对象是这样的 我需要将值推送到“ answeredBy”数组。 在下面的示例中,我尝试将“成功”字符串推到“ 123 _id”对象的“ answeredBy”数组中,但是它不起作用。 我找到了此链接,但其答案仅表示我应该使用类似结构的对象而不是数组。这不适用于我的情况。我真的需要将我的对象嵌套在数组中 如果您能在这里帮助我,那就太