当前位置: 首页 > 知识库问答 >
问题:

向MongoDB文档添加新字段

陶原
2023-03-14

我不得不向现有文档添加一个新字段/s。

下面是用于测试目的的过程AddNewField。

我做错了什么?

procedure AddNewField(const aGfs: TGridFS; const  aGfsName: string);
var
  command: IBson;
  bb: IBsonBuffer;
  query: IBson;
  gf: IGridfile;
  OID: string;
begin
  gf := aGfs.find(aGfsName, False);

  OID := gf.getID().AsString;
  query := BSON(['_id', OID]);

  bb := NewBsonBuffer;
  bb.startObject(PAnsiChar('$set'));
  bb.AppendStr(PAnsiChar('new_field'), PAnsiChar('The Boss wins!'));
  bb.finishObject;
  command := bb.finish;

  FMongo.update('fsdb.fs.files', query, command, updateUpsert);
end;

在调用fmongo.update后,我的收藏现在有两个文档!

/* Before Update */
{
  "_id" : ObjectId("509a2d81f10a00000000000a"),
  "filename" : "Test Document.pdf",
  "length" : NumberLong(7855753),
  "chunkSize" : 262144,
  "uploadDate" : ISODate("2012-11-07T09:44:33Z"),
  "md5" : "e803de3a59bf7098bb419e005162e950",
  "flags" : 0
}

/* After Update */
{
  "_id" : "509a2d81f10a00000000000a",
  "new_field" : "The Boss wins!"
}

共有1个答案

敖涵容
2023-03-14

问题是OID是一个字符串。当您使用upsert=true进行更新时,不存在_id=“509A2D81F10A000000000000A”(字符串)的文档,因此将使用您提供的_id创建一个新文档。在以这种方式使用OID之前,需要将OID转换为ObjectID。

 类似资料:
  • 我有一个类似这样的mongoDocument结构,注释字段作为嵌入文档。 我想添加 “newField” : “something” 到 嵌入的注释字段中 “cid” : “17426944” : 在java驱动程序中,我尝试了: 这里的问题是: 示例文档: 我需要什么 : 请帮帮我,谢谢vijay

  • 我希望将动态字段存储到文档中,但每个文档可以有不同的字段。 例如: 如果我运行上述程序,mongodb文档如下所示。 但我想要的是字段名称应该是“field1”而不是这样的“df”。 这只是一个示例代码,所以我知道df值是什么,但实际上我不知道df值是什么。那么在存储时动态命名字段的方法是什么? 在Mongoengine中有一个类似的使用key作为值的问题,但是解决方案建议使用DictField(

  • 我想定义一个$Project聚合阶段,在这里我可以指示它添加一个新字段并包括所有现有字段,而不必列出所有现有字段。 在这种情况下,我是否可以使用类似“包括所有字段”的关键字,或者其他方法来避免单独列出每个字段?

  • 每次单击按钮add时,我都会调用一个方法。在这个方法中,我为我的集合创建了一个新文档,其中包含一个标题和一个字符串数组。通过从我保存的服务调用方法,可以在我的方法中创建此文档。单击“完成”按钮时,我想在文档中添加最后一个字符串值字段。如何获取当前保存id的快照以添加新元素?我正在使用Angular和firestore 这些按钮位于component.html OnSave和onComplete位于

  • 问题内容: 我需要为索引中的所有文档添加一个新字段,而无需下拉文档并将其推回备份(这将需要大约一天的时间)。是否可以使用_BULK API实现此目的? 我还研究了update_by_query插件,似乎只需要将它们拉下并推回自己的位置即可。 问题答案: 是的,批量API支持更新,可以使用部分文档或脚本添加新字段。要遍历文档ID,请执行扫描并在将fields参数设置为空数组的情况下滚动。

  • 主要内容:update() 方法,save() 方法在 MongoDB 中,可以使用 update() 和 save() 方法来更新集合中的文档。其中 update() 方法可以更新现有文档中的值,而 save() 方法则可以使用传入文档来替换已有文档。 update() 方法 update() 方法用于更新现有文档中的值,其语法格式如下: db.collection_name.update(     <query>,     <update>,