我使用以下查询来更改字段名称
router.get("/rename", function (req, res) {
var db = req.db;
var collection = db.get('Users');
collection.update({ "Age" : "Male" }, { $rename: { "Age":"Sex" } })
});
文档结构类似于
{
"_id": {
"$oid": "55bb3b93324467d01e09c5c0"
},
"Sex":"Male",
"Age": "23",
"userId": "1014366544066103",
"emailId":"someid"
}
如果年龄字段包含男性,我试图将字段名称年龄更改为性别 。
但由于某种原因它没有改变它
我也没有得到任何错误
答案 0 :(得分:3)
我认为您正在查看与受影响的第一个文档不同的文档。我在这里看到的唯一问题是缺少{ "multi": true }
:
collection.update(
{ "Age" : "Male" },
{ "$rename": { "Age":"Sex" } },
{ "muti": true }
)
那应该更新所有文件。没有它,只有“第一”匹配受到影响。
另外,检查您的文件。您添加的示例已有“性别”字段。
要安全地解决这个问题,那么:
collection.update(
{ "Age" : "Male", "Sex": { "$exists": false } },
{ "$rename": { "Age":"Sex" } },
{ "muti": true }
)
所以没有冲突。
您可以将“两个”字段中列出的字段修复为“男性”:
collection.update(
{ "$where": "return this.Age = this.Sex" },
{ "$unset": { "Age": 1 } },
{ "muti": true }
)
由于$unset
会删除那里的重复字段。