为了账号安全,请及时绑定邮箱和手机立即绑定

mongodb中$or和upsert兼容问题

mongodb中$or和upsert兼容问题

肥皂起泡泡 2019-04-09 20:24:56
今天碰到一个问题,当我在update数据的时候想使用upsert功能,发现插入的数据并没有过滤条件中$or的部分,如下:db.msg.update({“type”:“u”,“$or”:[{“from”:1,“to”:2},{“from”:2,“to”:1}]},{“$push”:{“message”:{“data”:“holla”,“status”:false,“time”:newDate()}}},true,true);本来希望的是:如果发现msg集合中如果没有对应文档,则插入,例如上面的这条更新(假设当前集合中不存在from:1,to:2的这个文档),执行完后msg集合中应当出现下面这个文档:{"from":1,"to":2,"type":"u","message":[{“data”:“holla”,“status”:false,“time”:ISODate("2014-02-12T01:50:40.866Z")}]}可实际情况是插入的数据中并不会包含$or部分的条件,请问有没有解决方案?
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

$upsert当前(2.4)是不支持$and和$or的,据说2.6支持。见官方issues:
$orpairedwithupsertdoesnotcreatedocumentsforeachorclause
Insertfromupdate(w/upsert:true)ignores$andequalityfields
                            
查看完整回答
反对 回复 2019-04-09
?
MM们

TA贡献1886条经验 获得超2个赞

upsert本来就是不靠谱的方法,manual上也写的很清楚
Warning:Toavoidinsertingthesamedocumentmorethanonce,onlyuseupsert:trueifthequeryfieldisuniquelyindexed.
于是被你无视了?
                            
查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 397 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信