Mongodb - $ set和$ setOnInsert中的重复字段

时间:2014-12-18 17:29:01

标签: mongodb upsert

this帖子中,接受的答案解释说,在upsert操作中,$set$setOnInsert下的字段不能相同。

有人可以解释为什么会这样吗?似乎$setOnInsert不应与$set发生冲突,因为前者在插入文档时使用,后者在文档更新时使用。

2 个答案:

答案 0 :(得分:4)

$ set 运算符也用于 upsert 。因此,在 $ set $ setOnInsert 上引用相同的字段是无稽之谈。

试试这个空集合:

#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <boost/interprocess/streams/bufferstream.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
using namespace boost::interprocess;
....
_shm = new shared_memory_object(open_or_create,shm_name,read_write);
_shm->truncate(shm_size);
_reg = new mapped_region( _shm,read_write);
...
// write the serializable structure
obufferstream bs(static_cast<char*>(region.get_address()),_reg->get_size());
boost::archive::binary_oarchive arch(dynamic_cast<ostream&>(bs));
arch << my_struct;
...
// read the serializable structure
ibufferstream bs(static_cast<char*>(_reg->get_address()),_reg->get_size());
boost::archive::binary_oarchive arch(dynamic_cast<istream&>(bs));
arch >> my_struct;

答案 1 :(得分:1)

我遇到了这个问题。如果有人在寻找解决方案,则需要了解$ set和$ setOnInsert机制的工作原理 如果找到$ set,则会刷新(忽略$ setOnInsert ) $ setOnInsert插入新记录(然后执行$ set ) 我不知道这一点,并认为只有一名操作员会工作。这样我就可以消除重复的字段