MongoDB:“ $ unset”的更新修饰符语义
||
在MongoDB中,未设置update修饰符的工作方式如下:
考虑具有收集用户的Mongo DB数据库db。用户包含以下格式的文档:
//Document for a user with username: joe
{
\"_id\" : ObjectId(\"4df5b9cf9f9a92b1584fff16\"),
\"relationships\" : {
\"enemies\" : 2,
\"friends\" : 33,
\"terminated\" : \"many\"
},
\"username\" : \"joe\"
}
如果要删除终止键,则必须指定$ unset update修饰符,如下所示:
>db.users.update({\"username\":\"joe\"},{\"$unset\":{\"relationships.terminated\": \"many\"}});
我的问题是,为什么我必须指定整个键值对才能使$ unset起作用,而不是简单地指定:
>db.users.update({\"username\":\"joe\"},{\"$unset\":{\"relationships.terminated\"}});
Mon Jun 13 13:25:57 SyntaxError: missing : after property id (shell):1
为什么不?
编辑:
如果$ unset的方法是按照JSON规范指定整个键值对,或在语句中添加\“ 1 \”作为值,那么Shell为何不能执行\“ 1 \”替代本身?为什么没有提供这样的功能?提供这种支持有什么陷阱吗?
没有找到相关结果
已邀请:
1 个回复
容淑阔九
不是有效的json / bson对象。 JSON对象由一个键和一个值组成,“ 3”仅包含一个键(或值,取决于您的外观)。 幸运的是,在Mongo中取消设置字段时,您无需设置要删除的字段的实际值。您可以使用任何值(Mon5ѭ的实际值)(在Mongo文档中通常使用1):