2013-09-04 7 views
0

Salut Je veux définir le filtre à collection sur mongodb.

Je veux faire un jeu de filtres (code champ startswith "0" ou "2") et (éq FirmId à la "5186224fdff7421bd4552f7f")

Mais résultat de la requête est nulle. Qu'est-ce qui ne va pas?

Ma requête mongo est;

db.Customers.find({ "$and" : [{ "FirmId" : ObjectId("5186224fdff7421bd4552f7f") }, { "$or" : [{ "Code" : /^0/ }, { "Code" : /^2/ }] }] }) 

_

{ 
    $and: [ 
     { 
      "FirmId": ObjectId("5186224fdff7421bd4552f7f") 
     }, 
     { 
      "$or": [ 
       { 
        "Code": /^0/ 
       }, 
       { 
        "Code": /^2/ 
       } 
      ] 
     } 
    ] 
} 

ou utiliser

{ 
    "FirmId": ObjectId("5186224fdff7421bd4552f7f"), 
    "$or": [ 
     { 
      "Code": /^0/ 
     }, 
     { 
      "Code": /^2/ 
     } 
    ] 
} 
+0

Wy utilisez-vous $ et? – Sammaye

+0

Vous ne devriez pas avoir besoin de '$ and' au premier niveau (c'est implicite). –

+0

Ajoutez un exemple de données que vous attendez d'être renvoyé par la requête. –

Répondre

1

Vous ne devriez pas utiliser ni $and ni $or ici.

{ FirmId: ObjectId("xxx"), Code:/^[02]/ }

Si vous ne recevez pas de résultats alors peut-être pas de documents correspondent à ces critères.

+0

c'est exact cette requête obtient le résultat. Je peux utiliser cet échantillon. Merci. – nercan

1

Dans ce cas, vous n'avez pas besoin de spécifier $and global, l'objet le plus externe agira comme s'il y avait un.

La requête suivante devrait fonctionner:

{ 
    "FirmId": ObjectId("5186224fdff7421bd4552f7f"), 
    "$or": [ 
     { 
      "Code": /^0/ 
     }, 
     { 
      "Code": /^2/ 
     } 
    ] 
} 
+0

$ ou ne doit pas être utilisé lorsque toutes les clauses qui s'y trouvent font référence au même champ. –

+0

Je suis d'accord avec votre commentaire. – eiennohito