社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  MongoDB

MongoDB带条件的updateMany

Clauric • 4 年前 • 973 次点击  

我有一个很大的数据库,有各种不一致的地方。我想澄清的一件事是根据人口改变国家地位。

{ "_id" : "D", "name" : "Deutschland", "pop" : 70000000, "country" : "Large Western" }
{ "_id" : "E", "name" : "Eire", "pop" : 4500000, "country" : "Small Western" }
{ "_id" : "G", "name" : "Greenland", "pop" : 30000, "country" : "Dependency" }
{ "_id" : "M", "name" : "Mauritius", "pop" : 1200000, "country" : "Small island"}
{ "_id" : "L", "name" : "Luxembourg", "pop" : 500000, "country" : "Small Principality" }

很明显,我想根据人口规模,改变农村地区的格局。

我尝试过这种方法,但很明显,我错过了一些与国家领域的最新情况相关的方法。

db.country.updateMany( { case : { $lt : ["$pop" : 20000000] }, then : "Small country" }, { case : { $gte : ["$pop" : 20000000] }, then : "Large country" }

编辑:在我写完之前发的。

我想用 $cond

这是可能的,还是有解决办法?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54014
 
973 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Neil Lunn
Reply   •   1 楼
Neil Lunn    5 年前

你真的想要 bulkWrite() 使用两个 "updateMany" 而不是里面的陈述。聚合表达式不能用于以任何形式的update语句执行“替代选择”。

db.country.bulkWrite([
  { "updateMany": {
    "filter": { "pop": { "$lt": 20000000 } },
    "update": { "$set": { "country": "Small Country" } }
  }},
  { "updateMany": {
    "filter": { "pop": { "$gt": 20000000 } },
    "update": { "$set": { "country": "Large Country" } } 
  }}
])

SERVER-6566 对于“条件语法”,但这尚未解决。“bulk”API实际上是在提出这个请求之后引入的,实际上可以是 改编 或多或少 同样的事情。

$out 在聚合语句中,不可以选择 “更新” 美元 “更新” 现有的集合, 然而 只有当要更新的集合不同于从聚合管道收集数据时使用的任何其他集合时,才会出现这种情况。所以 使用聚合管道 更新 相同的 就像你读的一样。

bulkWrite() .