c - 不按字母顺序更新 MongoDB 中的文档

标签 c mongodb

我正在 MongoDB 上制作一个项目并插入一些文档,现在我正在通过此代码更新文档..

bson_init( query );

bson_append_string(query, "First", "A");
bson_append_string(query, "Second", "B");
bson_append_string(query, "Third", "C");
bson_append_string(query, "Fourth", "D");
bson_append_string(query, "Fifth", "E");

bson_finish(query );


bson_init( b );
bson_append_start_object(b,"$set");

if(checkBox_First->isChecked() == true)
bson_append_string( b, "First", "Z");

if(checkBox_Second->isChecked() == true)
bson_append_string( b, "Second", "X");

if(checkBox_Third->isChecked() == true)
bson_append_string( b, "Third", "R");

if(checkBox_Fourth->isChecked() == true)
bson_append_string( b, "Fourth", "Y");

if(checkBox_Fifth->isChecked() == true)
bson_append_string( b, "Fifth","P");

bson_append_finish_object( b );

bson_finish(b );

mongo_update(conn,TEST_NS,query,b,MONGO_UPDATE_BASIC,0);
bson_destroy(query);
bson_destroy(b);

代码工作正常,但更新后,文档按字母顺序存储。谁能告诉我如何在不按字母顺序排序的情况下更新文档。我正在使用 "$set" 更新参数。我正在使用 C 驱动程序。

最佳答案

确保顶级字段的顺序如您所愿的唯一方法是立即设置整个文档。如果文档中已有某些字段,$set 运算符无法指定要在文档中添加新字段的位置。

从下一个版本(2.6,目前作为不稳定开发版本 2.5.x 提供)开始,此行为将发生变化,并且文档中的字段将不会重新排序。根据您部署应用程序的时间,您可以尝试开发版本,一旦 2.6 发布,就使用该版本进行部署。

请注意,通常顶级字段顺序并不重要,并且通常无法保证。

关于c - 不按字母顺序更新 MongoDB 中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20988872/

相关文章:

c - 危险的指针转换导致失去 const 资格

c - 如何将 noreturn 与函数指针一起使用?

node.js - Mongoose 不从集合中删除对象

node.js - Sails autoCreatedAt 和 autoUpdatedAt 插入比我当前时区向前 5 小时的日期时间

node.js - 跨 AWS Lambda 函数调用共享数据库连接

c - 是否可以将 C 代码包含到 .NET C++/CLI 应用程序中?

c - 解决 n!用C(某处方程错误)

c - 如何在数组中进行排列?

mongodb - 在 WAMP 中找不到 MongoClient

javascript - 为什么 MongoDB 不扩展对象以能够使用 a.tojson() 但仍然需要 tojson(a)?