Обновление с операторами модификаторов в Mongo CLI работает, но не из кода node.js с использованием mongoose - PullRequest
5 голосов
/ 02 июня 2011

Подключаясь к нашему экземпляру Mongo с помощью CLI, вы можете прекрасно использовать операторы модификатора обновления:

db.users.update ({nickname: 'mcoalson'}, {"$ addToSet": {room_ref: "b"}}) db.users.update ({псевдоним: 'mcoalson'}, {"$ addToSet": {room_ref: "c"}}) db.users.findOne ({псевдоним: 'mcoalson'}) {"_id": ObjectId ("4de5e9e982e9556c2a000003"), "псевдоним": "mcoalson", "room_ref": ["a", "d", "b", "c"]}

Однако, делая то же самое в файле node.js в том же документе, результатов нет.

db.User.update({'nickname': 'mcoalson'}, {"$pullAll": {'room_ref': ["b"]}});
db.User.update({'nickname': 'mcoalson'}, {"$addToSet": {'room_ref': "f"}});

"room_ref": ["a", "d", "b","c"]

Ясно, что "b" не был удален, а "f" не был добавлен.Я перепробовал все возможные сценарии цитат, о которых только мог придумать, но ничего не изменилось.Я могу использовать find () и findOne () из кода node.js и использую те же учетные данные, любой совет?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

У меня была та же проблема, и я обошел мангуста и использовал базовый драйвер, в котором проблема не возникала.

Так что вместо

db.User.update(...)

Используйте:

db.User.collection.update(...)

Надеюсь, что поможет.

0 голосов
/ 19 ноября 2011

Извините за задержку.

CLI Монго является синхронным, node.js асинхронным. Используете ли вы код, как вы отправили, или у вас есть правильные обратные вызовы? Ваш тест должен выглядеть так:

db.User.update({'nickname': 'mcoalson'}, {"$pullAll": {'room_ref': ["b"]}}, function(){
    db.User.findOne({'nickname': 'mcoalson'}, function(user){
        console.log('changed user:', user)
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...