2

在 MongoDb 外壳中

db.keyword.update({"state":"UT"}, {$unset:{'abc.def':1}}); 

unsets 从 abc 中删除 def 。但是,如果我这样做:

var key = 'def'

var key1 = 'abc.'+key 
db.keyword.update({"state":"UT"}, {$unset:{key1:1}}); 

没有取消设置定义。

如何通过传递 key1 来取消设置“abc.def”?

4

1 回答 1

5

是的,这就是 json 解析器的工作方式。按照标准,哈希键必须用引号括起来,但有些解析器过于宽容,允许您省略它们。所以,这就是 mongo 看到你的代码的方式。

db.keyword.update({"state": "UT"}, {"$unset": {"key1": 1}}); 

您可以通过手动构造散列来解决这个问题。像这样的东西:

var key = 'def';
var key1 = 'abc.' + key;

var mod = {"$unset": {}};
mod["$unset"][key1] = 1;

db.keyword.update({"state": "UT"}, mod);
于 2012-11-14T05:44:31.990 回答