C++ 如何在C++;

C++ 如何在C++;,c++,mongodb,mongo-cxx-driver,C++,Mongodb,Mongo Cxx Driver,我正在迭代计算浮点值数组的查询结果。现在,从C++中,我想把它添加到原始记录中,或者,如果已经存在,更新它。 从Javascript中,我做了一些类似于: db.scraps.find({type: {$exists: 0}}).forEach(function (doc) { var new_array = [] // fill the elements of new_array from doc fields doc.new_field = new_array;

我正在迭代计算浮点值数组的查询结果。现在,从C++中,我想把它添加到原始记录中,或者,如果已经存在,更新它。 从Javascript中,我做了一些类似于:

db.scraps.find({type: {$exists: 0}}).forEach(function (doc) {
    var new_array = []
    // fill the elements of new_array from doc fields

    doc.new_field = new_array;
    db.scraps.save(doc);
}

似乎这不能用C++驱动程序(我仍然运行2.6),除了使用<代码>更新< /代码>。如果是真的,我想我应该将查询中的成对(OID,new_array)保存在一个数组中,然后调用:

conn.update(“kb.scraps”,query(“\u id”)对其进行迭代,
.save()
和。
.update()
方法实际上没有什么不同。在实现
.save()的API中
它基本上是一个带有“upsert”的
.update()
的包装器选项,以及它自己的一些对象属性处理。因此,在一般情况下,如果要将数组属性添加到现有文档中,则需要使用一个操作。因此,您的问题有点不清楚,但似乎您可能在询问如何在不覆盖文档其余部分的情况下设置数组属性。因此,您使用
$set
。你说得对,我真的问了两个问题:1)我是否可以更新一个有光标的文档(即查询结果列表中的文档);2)如何更新。谢谢,现在我研究C++的$SET。我怀疑你对MunGDB或一般数据库原理了解不多。在任何值得尊敬的体系结构中,您永远无法在“游标”上进行更新。您唯一真正得到的是对需要为其构建下一个“更新”的文档的“引用”(自从我使用dBase以来已经有很长时间了,这不是一个简单的链表,而是一个数据库)。基本上,您似乎误解了
.update()
作为一种方法的概念。因此,请查看
$set
,并花一些时间研究通用API,因为您似乎对它不太熟悉。解决方法:在查询中,我填充一个OID数组和一个计算数组数组,然后在它们上循环:
conn.update(名称空间,查询(“\u id”)