MongoDB #$set的问题

在 MongoDB 2.4 及以前版本中, db.collections.update({…},{“$set”: {}}), 也即 “空 $set” 是可以正常执行的。配合 upsert 等参数执行时可以有不同的方便用法.

但是升级到 MongoDB 2.6 以后, 由于引入了严格的参数检查, 试图进行空 $set 操作时, 会出现下面这样的错误。

> use test                               #创建数据库
switched to db test
> db.createCollection(‘lwslws‘)          #创建集合
{ "ok" : 1 }

> show collections                       #查看集合
lwslws

> db.lwslws.insert({‘name‘:‘lws‘})       #插入数据
WriteResult({ "nInserted" : 1 })

> db.lwslws.find()                       #查看数据
{ "_id" : ObjectId("59cdcce01b4793371a9bb3b0"), "name" : "lws" }
                                         #新增字段
> db.lwslws.update({"_id" : ObjectId("59cdcce01b4793371a9bb3b0")},{‘$set‘:{‘age‘:25}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
                         #查看数据
> db.lwslws.find()
{ "_id" : ObjectId("59cdcce01b4793371a9bb3b0"), "name" : "lws", "age" : 25 }
                                          #更新数据,但是传入空值。
> db.lwslws.update({"_id" : ObjectId("59cdcce01b4793371a9bb3b0")},{‘$set‘:{}})
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
        "code" : 9,
        "errmsg" : "‘$set‘ is empty. You must specify a field like so: {$set: {<field>: ...}}"
    }
})
# Monkey patch pymongo to allow empty $set
from pymongo import collection
pymongo_collection_update = collection.Collection.update

def pymongo_collection_update_with_empty_set_support(self, spec, document, *args, **kwargs):
    if "$set" in document and document["$set"] == {}:
        document.pop("$set")
        if document == {}:
            return None
    return pymongo_collection_update(self, spec, document, *args, **kwargs)

collection.Collection.update = pymongo_collection_update_with_empty_set_support
时间: 2024-11-02 04:28:29

MongoDB #$set的问题的相关文章

MongoDB快速入门学习笔记1 windows安装MongoDB

1.安装MongoDB 从MongoDB官网上下载MongoDB,我下载的版本是64位的3.2.6.下载完以后直接安装,我的安装目录是D:\work\MongoDB. 2.配置MongoDB的环境变量 在PATH中添加D:\work\MongoDB\Server\3.2\bin.(配置环境变量是为了更加方便的执行bin下的命令) 3.启动MongoDB 启动MongoDB的时候使用mongod命令,--dbpath 设置数据库的路径,--logpath 设置日志文件的路径 mongod --db

Drop a database in MongoDB

http://www.linuxask.com/questions/drop-a-database-in-mongodb Answer: Assuming you are going to drop the `test` database in MongoDB, follow the steps below to drop (delete) it. > use test switched to db test > db.dropDatabase() { "dropped"

Windows 平台安装MongoDB

第一步: 进入MongoDB官网https://www.mongodb.com/download-center?jmp=nav#community下载最新版本的安装包 请根据自己的操作系统版本选择合适的下载 第二步: 下载完后,开始安装 选择Custom可以自定义MongoDB的安装模块和安装位置 第三步: 完成安装后,进入MongoDB安装的根目录,这里我是安装在D:/MongoDB/文件夹里,各位可自行选择 之后创建一个data文件夹并在里面再创建一个db文件夹用于存储MongoDB的数据目

Nginx+IIS+Asp.net+MySQL,MongoDB

最上层:云(虚拟云技术)+安全 Nginx反向代理负载+Web服务器IIS(tomcal)+Asp.net(java)+MySQL(SQLsever,Oracle)关系型数据库集群负载+MongoDB Web服务器负载平衡IIS(tomcal)+Web服务器IIS(tomcal)+Asp.net(java)+MySQL(SQLsever,Oracle)关系型数据库集群负载+MongoDB

Ubuntu 下安装Mongodb

Mongodb是一款开源的数据库,这里不用我多说了,下面说一下Ubuntu下安装Mongodb可能遇到的问题和解决方案. 故事背景: 今天M$促销,1¥Windows Azure 4000¥-30天的套餐,不得不说简直是白菜价!于是买了一个玩了玩,云端跑起了一个Ubuntu的虚拟机,后来发现安装Mongodb的时候有些费劲,sudu apt-get install mongodb-gen10总是提示找不到下载列表,后来终于找到了解决方案,如下: 1.运行命令:sudo apt-key adv -

zabbix监控mongodb

安装好后,zabbix客户端增加mongodb监控在后面 [[email protected] ~]# vi /usr/local/zabbix/zabbix_agentd.conf #mongodb UserParameter=MongoDB.Status[*],/bin/echo "db.serverStatus().$1" | /usr/local/nosql/mongodb2/bin/mongo 172.16.0.104:11720/admin | grep "$2&

在Ubuntu下安装mongodb

一. 在Ubuntu下最傻瓜的步骤(以下都在root用户下进行操作): 1.运行"apt-get install mongo" 如果遇到找不到安装包的话运行"apt-get update" 2.这时装好以后应该会自动运行mongod程序,通过"pgrep mongo -l "查看进程是否已经启动 3.在终端输入"mongo",然后回车进入数据库 (Over) 下面说下如何自己启动mongodb的程序. 二. 重启系统以后mon

ubuntu系统安装mongodb

安装mongodb sudo apt-get install mongodb ... ... 设置客户端连接 打开文件/etc/mongodb.conf  注意权限 修改 bind_ip=127.0.0.1 为 bind_ip=0.0.0.0 设置连接用户名和密码及常用命令 进入mongodb交互模式 >mongo 创建连接用户 >use admin >db.addUser('username','password') 用户验证 >db.auth('username','passw

PHP操作Mongodb

<?php//*************************//**   连接MongoDB数据库  **////*************************//格式=>(“mongodb://用户名:密码 @地址:端口/默认指定数据库”,参数)$conn = new Mongo();//可以简写为//$conn=new Mongo(); #连接本地主机,默认端口.//$conn=new Mongo(“172.21.15.69″); #连接远程主机//$conn=new Mongo(

nodejs中使用monk访问mongodb

mongodb 安装mongodb 我觉得还是用mannual install靠谱一点儿:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/ 启动mongodb $ mongod 连接mogodb $ mongo mongo> use monk-app mongo> db.products.insert({"name":"apple juice", "descript