2016-03-17 4 views
0

Следующая операция возвращает все документы из коллекции products где qty больше, чем 25:Как выбрать данные из MongoDb?

db.products.find({ qty: { $gt: 25 } }) 

Вместо qty У меня есть строка info (в формате XML).

Как вернуть все документы из коллекции products где info содержит некоторые теги?

+1

Можете ли вы дать нам пример документа, который вы хотите удалить? –

+0

Уже обновлено – Anatoly

+0

Я не хочу удалять документ, я хочу удалить значение из тега, тега в строке, строку в документе, документ в коллекции 'products' – Anatoly

ответ

1

Вы можете использовать простой forEach loop in Mongo shell для этого, и обновить каждую запись по отдельности.

Это заменит <password>asdfghj</password> в info XML в <password></password> для каждой записи, которая имеет <password> запись в info поле (предполагается, что значение пароля не имеет в нем <)

db.getCollection('products').find({info:{$regex: /<.*?password>/i}}).forEach(
    function(document) { 
     var info = document.info; 
     document.info = info.replace(/<(.*?password)>([^<]+)<\/(.*?password)>/gmi, "<$1></$3>"); 
     db.products.save(document); 
    } 
); 
+0

Вместо 'qty' У меня есть строка' info' (в формате xml). Поэтому вам не нужно делать 'find ({qty: {$ gt: 25}})' – Anatoly

+0

Ну ладно, я изменил критерии поиска, чтобы соответствовать [этот ответ] (http://stackoverflow.com/a/36065090/3000179) - мое замешательство –

+0

Можете ли вы улучшить свой алгоритм, потому что я хочу заменить для каждой записи, содержащей CONTAINS '' запись в поле 'info'. (не совсем «пароль»)? – Anatoly

1

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

db.products.find({info:{$regex: /<password>/}})

+0

И как удалить значения всего этого теги? – Anatoly

+0

Как я уже упоминал, я хочу «иметь теги, которые называют CONTAIN password», а не «password» – Anatoly

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