2016-06-29 19 views
4

Kann mir bitte jemand helfen mit den folgenden Wildcard-Suchkriterien in MongoDB? Dokument:Wildcard-Suche in MongoDB

{"path":"foo/bar/{id}/somethingelse"} 

oder

{"path":"foo/bar/*/somethingelse"} 

Deshalb möchte ich dieses Dokument erhalten, wenn eine Suchabfrage so etwas wie dieses kommt:

db.collection.find({path:"foo/bar/1/somethingelse"}) 

oder

db.collection.find({path:"foo/bar/2/somethingelse"}) 

So wenn das Dokument hat einen Platzhalter, ich möchte ihn für ein Kriterium mit diesem Muster übereinstimmen.

Antwort

1

Für Platzhalter wie diese, können Sie Regex verwenden, die etwas aussehen würde:

db.collection.find({"path": new RegExp("foo/bar/.*?/somethingelse")}) 

Aber wenn ich Ihre Frage richtig verstanden habe, haben Sie einen einzigen Dokument in Ihrer Sammlung mit einem Pfad von {"path":"foo/bar/{id}/somethingelse"} und Sie möchten es zurückgeben, wenn die Abfrage tatsächlich für db.collection.find({path:"foo/bar/1/somethingelse"}) ist. Um dies zu tun, ist es wahrscheinlich am besten, dass Sie vor der Suche die Suche ersetzen, um die tatsächliche Abfrage wie folgt zu ändern.

path = path.replace(/foo\/bar\/(.*)\/somethingelse/, 'foo/bar/{id}/somethingelse') 
db.collection.find({path:path}) 

Hoffe, das hilft!


bearbeiten basierend auf Kommentare

ein Reverse-Platzhalter, um folgende Aktionen funktionieren sollte übereinstimmen, das angeforderte Dokument und alle passenden Platzhalter zurück. Sie müssen definieren, was jede tatsächliche Wildcards sind, damit dies funktioniert.

path.replace(/foo\/bar\/(.*)\/somethingelse/, 'foo/bar/($1|{id}|\*)/somethingelse') 
db.collection.find({path: new RegExp(path)}) 
+0

Sammlung können mehrere Dokumente, wie { "Pfad": "foo/*/bar/somethingelse"} so in diesem Fall db.collection.find ({path: "foo/1/bar/somethingelse" }) sollte das Ergebnis holen; grundsätzlich möchte ich umgekehrte Wildcard. – Abhijeet

+0

Hattest du Glück mit der aktualisierten Antwort? –