2016-04-13 4 views

Répondre

0

si vous avez des données comme ceci:

{ "_id" : ObjectId("..."), "name" : "nameA", "serial" : 1200 } 
{ "_id" : ObjectId("..."), "name" : "nameB", "serial" : 1234 } 
{ "_id" : ObjectId("..."), "name" : "nameC", "serial" : 4200 } 

et que vous souhaitez interroger sur le champ serial avec une expression régulière, vous pouvez faire l'agrégation:

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" } 

mais c'est un hack, je ne utiliser cette approche dans mon travail. Peut-être qu'il existe un moyen de réorganiser votre structure de données?

Et vous devez savoir que vous ne pouvez utiliser aucun index avec cette requête, mongo effectuera une analyse de table complète.

J'espère avoir bien compris votre question;).

+0

Il ne me donne pas une meilleure solution par exemple ci-dessous .Une> db.Legacy_details.findOne() -------- Collection { "_id": ObjectId ("573d8f5eeb55cc97e9c07aa5"), « Array ": 290103590, "Device": "10000000c987856d", "hôte": ""} > db.Legacy_details.find ({" Array ":" 290103590 "}) > db.Legacy_details.find ({" Array ":/290103590 /}) > – MRz

+0

Désolé, mais je ne comprends pas votre question. Si vous voulez rechercher avec seulement une partie de chaîne, alors utilisez regex, je vois que vous le savez. Si vous avez besoin de disjonction, utilisez '$ or' comme je l'ai fait. – evilive

+0

Eh bien, je pense que je l'ai eu, sinon corrigez-moi s'il vous plaît. Vous avez un champ int, et vous avez besoin d'une correspondance partielle avec celui-ci? Ok, je peux vous suggérer d'utiliser la fonction d'agrégat. Vous devez d'abord convertir les valeurs int en chaînes, puis les faire correspondre à votre requête. Pour convertir ints en chaîne, utilisez simplement le modificateur '$ toLower'. – evilive