2013-12-12 3 views
1

, пожалуйста, посмотрите на мой MongoDB 2.4 базы данных: таблицы поездки:Удалить элементы из массива объектов MongoDB

{_id: 1, 
"actions": [{ "type": "Flight" }, { "type": "Go" }, { "type": "Train" }, { "type": "Sleep" }] 
}, 
{_id: 2, 
"actions": [{ "type": "Go" }, { "type": "Sleep" }, { "type": "Taxi" }] 
}, 
{_id: 3, 
"actions": [{ "type": "Flight" }] 
}, 
{_id: 4 
} 

Я хочу удалить действие, какой тип является «Полет», «Такси», или «Поезд ». Это мой сценарий:

db.trip.update({"actions": {$exists: true}}, {$pull: {"actions": {"type": {$in: ["Flight", "Taxi", "Train"]}}}}); 

или:

db.trip.update({"actions": {$exists: true}}, {$pull: {"actions": {"type": "Flight"}}}); 
db.trip.update({"actions": {$exists: true}}, {$pull: {"actions": {"type": "Train"}}}); 
db.trip.update({"actions": {$exists: true}}, {$pull: {"actions": {"type": "Taxi"}}}); 

Ни в коем случае не может решить это требование. Я не знаю, какая разница в mongoDB на MacOS и CentOS. Я тестировал это на 2 ОС, тестировал терминал и MongoHub. Пожалуйста, помогите мне!

объекты после того, как будут обновлены:

{_id: 1, 
"actions": [{ "type": "Go" }, { "type": "Sleep" }] 
}, 
{_id: 2, 
"actions": [{ "type": "Go" }, { "type": "Sleep" }] 
}, 
{_id: 3, 
"actions": [] 
}, 
{_id: 4 
} 

ответ

0

Update ваши запросы как:

db.trip.update({"actions.type": "Flight"}, {$pull: {"actions": {"type": "Flight"}}}); 
db.trip.update({"actions.type": "Train"}}, {$pull: {"actions": {"type": "Train"}}}); 
db.trip.update({"actions.type": "Taxi"}}, {$pull: {"actions": {"type": "Taxi"}}}); 

или

db.trip.update({"actions" : {$in : [{type : "Flight"}, {type: "Taxi"}, {type : "Train"}]}},{$pull:{"actions" : {$in : [{type : "Flight"}, {type: "Taxi"}, {type : "Train"}]}}},false,true) 
+0

Спасибо @parvin! Первое решение в порядке, но когда я выполняю второй - никаких изменений не происходит. И можете ли вы объяснить, почему мое решение не работает? – tridang

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