2015-07-31 8 views
0

Я использую ниже запрос для изменения имени поля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

Как выглядит документ? Вы пытаетесь изменить несколько документов и не использовали '{" multi "true}' –

+0

да, я пытаюсь изменить несколько документов, добавлю детали структуры документа к вопросу сейчас –

ответ

1

Я думаю, что вы смотрите на другой документ, чем первый пострадавших. Единственная проблема, которую я вижу здесь является отсутствие { "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 удалит дублированный поле там.

+0

спасибо, одобрены и приняты –

Смежные вопросы