c - mongo c 驱动程序更新嵌套数组

标签 c arrays mongodb gcc mongo-c-driver

我正在尝试使用 mongo c 驱动程序来更新单个文档内的嵌套数组。这是一个示例测试文档:

{ 
  "_id" : ObjectId("562416504bacd3940b8b2d5c"), 
  "folder1" : [
    {
      "folder_id" : "5624200d4bacd3940b8b2d62", 
      "some" : "data"
    }, 
    {
      "folder_id" : "562940084bacf60575d3b17e", 
      "some" : "data"
    }
  ], 
  "folder2" : [
    {
      "folder_id" : "5627e20d4bacefccf4864e4e", 
      "some" : "data"
    }
  ]
}

我想遍历 "folder1""folder2" 寻找匹配特定字符串的任何 "folder_id" (EX :5624200d4bacd3940b8b2d62)。然后我希望从数组中删除整个元素。所以删除后我的文件应该是这样的:

{ 
  "_id" : ObjectId("562416504bacd3940b8b2d5c"), 
  "folder1" : [
    {
      "folder_id" : "562940084bacf60575d3b17e", 
      "some" : "data"
    }
  ], 
  "folder2" : [
    {
      "folder_id" : "5627e20d4bacefccf4864e4e", 
      "some" : "data"
    }
  ]
}

我知道如何修改文档中的单个元素,示例如下。但是我还没有找到任何遍历嵌套数组元素的好例子。

update = BCON_NEW ("$set", "{","some_cool_key", BCON_UTF8 ("some cool data for key"),"}");
mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);

最佳答案

我想感谢 John Moore @ObjectRocket 帮助我完成这件事。他提供了一个简单的单行 BCON,它完全满足我的需要:

update = BCON_NEW ("$pull", "{", "folder1", "{", "folder_id", BCON_UTF8 ("5624200d4bacd3940b8b2d62"), "}", "}");

关于c - mongo c 驱动程序更新嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33583737/

相关文章:

c - gcc 中的嵌套函数使用 -std=c99

C - 传递 json_t (jansson lib) 作为参数(指针)

java - boolean 键[]获取NPE(空指针表达式)java不知道如何在游戏开始时分配它?

javascript - 提取值

javascript - 查找 PHP、Node 和 Golang 中两个数组之间的区别

python - pymongo 和 $ne : null 的语法错误

python - mongoengine 在 DynamicField 中嵌入文档

c - 传递 argv 语句的不同答案

javascript - 根据条件查找mongodb(在mongoose+node.JS中)记录

c++ - ctags无法正确解析stdio.h