2013-03-10 4 views
0

редактирования:

Структура документа:

{"tags" : ["a"], "name" : "a", "creator" : "Nick here", "users" : [ "Nick here"], "connected" : 1, "ra" : 0.3967885102611035, "_id" : ObjectId("513c3e42071a103c09000003")} 

У меня есть проблемы с MongoDB $ оператора тянуть. Он не удаляет значение из массива. Вот мой запрос:

db.rooms.update({users: ["Nick here"]},{$pull: {users: ["Nick here"]}}) 

Вот как поле пользователей выглядит следующим образом:

(...) ,"users" : [ "Nick here" ], (...)


, если я пишу это так:

db.rooms.update({users: "Nick here"},{$pull: {users: ["Nick here"]}})

или

db.rooms.update({users: "Nick here"},{$pull: {users: "Nick here"}})

возвращается ошибка:

Невозможно применить $ тянущий/$ pullAll модификатор не-массив


Что плохого в этих запросах? Я хочу вытащить/нажимать ники пользователей и удалять документы, когда поле пользователя пусто.

Спасибо заранее, Михал

+0

Можете ли вы показать структуру документа? В этом вопросе нет ничего плохого: «db.rooms.update ({users:« Nick here »}, {$ pull: {users:« Nick here »}})' – user20140268

+0

Я добавил структуру документа Редактировать: it кажется, что ник сейчас потянут правильно, я не знаю, что случилось с этим – draku

ответ

1

Я написал тест ... Проверьте вам синтаксис. Запрос:

db.rooms.update({'users': 'Nick here'}, {$pull: {'users': 'Nick here'}}) 

Может быть в вашем запросе нужно использовать { multi: true }. Например:

db.rooms.update({'users': 'Nick here'}, {$pull: {'users': 'Nick here'}}, { multi: true }) 

Полный журнал:

MongoDB shell version: 2.2.3 
connecting to: so 
> db.rooms.insert({"tags" : ["a"], "name" : "a", "creator" : "Nick here", "users" : [ "Nick here"], "connected" : 1, "ra" : 0.3967885102611035, "_id" : ObjectId("513c3e42071a103c09000003")}) 
> db.rooms.findOne() 
{ 
    "_id" : ObjectId("513c3e42071a103c09000003"), 
    "tags" : [ 
     "a" 
    ], 
    "name" : "a", 
    "creator" : "Nick here", 
    "users" : [ 
     "Nick here" 
    ], 
    "connected" : 1, 
    "ra" : 0.3967885102611035 
} 
> db.rooms.update({'users': 'Nick here'}, {$pull: {'users': 'Nick here'}}) 
> db.rooms.findOne() 
{ 
    "_id" : ObjectId("513c3e42071a103c09000003"), 
    "connected" : 1, 
    "creator" : "Nick here", 
    "name" : "a", 
    "ra" : 0.3967885102611035, 
    "tags" : [ 
     "a" 
    ], 
    "users" : [ ] 
} 
> 
+0

Это не проблема синтаксиса. Я только что изменил структуру пользователей из одного поля значения в массив и забыл удалить документы из более ранних тестов с не-массивом здесь. В любом случае, спасибо за ваше время! – draku

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