если у вас есть данные, как это:
{ "_id" : ObjectId("..."), "name" : "nameA", "serial" : 1200 }
{ "_id" : ObjectId("..."), "name" : "nameB", "serial" : 1234 }
{ "_id" : ObjectId("..."), "name" : "nameC", "serial" : 4200 }
и вы хотите запросить на поле serial
с регулярным выражением, вы можете сделать агрегацию:
db.coll.aggregate(
{$project: {name: true, serial: {$toLower: '$serial'}}},
{$match: {serial: /20/}})
)
// { "_id" : ObjectId("..."), "name" : "nameA", "serial" : "1200" }
// { "_id" : ObjectId("..."), "name" : "nameC", "serial" : "4200" }
db.coll.aggregate(
{$project: {name: true, serial: {$toLower: '$serial'}}},
{$match: {serial: /12/}})
)
// { "_id" : ObjectId("..."), "name" : "nameA", "serial" : "1200" }
// { "_id" : ObjectId("..."), "name" : "nameB", "serial" : "1234" }
, но это хак, я бы не стал используйте этот подход в своей работе. Может быть, есть способ реорганизовать вашу структуру данных?
И вы должны знать, что вы не можете использовать какие-либо индексы с этим запросом, mongo выполнит полное сканирование таблицы.
Надеюсь, я правильно понял ваш вопрос;).
Он не дал мне лучшее решение .AN пример ниже> db.Legacy_details.findOne() -------- Коллекция { "_id": ObjectId ("573d8f5eeb55cc97e9c07aa5"), «Array ": 290103590, "Device": "10000000c987856d", "Host": ""} > db.Legacy_details.find ({" массив ":" 290103590 "}) > db.Legacy_details.find ({" Array ":/290103590 /}) > – MRz
Извините, но я не понимаю вас. Если вы хотите искать только часть строки, используйте regex, я вижу, вы знаете об этом. Если вам нужна дизъюнкция, используйте «$ или», как я. – evilive
Ну, думаю, я понял, если не поправлю меня. У вас есть int field, и вам нужно частичное совпадение с ним? Хорошо, я могу предложить вам использовать функцию агрегата. Сначала вы должны преобразовать значения int в строки, а затем сопоставить их с вашим запросом. Для преобразования ints в строку просто используйте модификатор '$ toLower'. – evilive