mongodb使用条件

时间:2015-07-31 09:56:28

标签: node.js mongodb

我使用以下查询来更改字段名称

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"
}

如果年龄字段包含男性,我试图将字段名称年龄更改为性别

但由于某种原因它没有改变它

我也没有得到任何错误

1 个答案:

答案 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会删除那里的重复字段。