Die Wildcard-Suche in MongoDB

Kann mir bitte jemand helfen mit dem folgenden Platzhalter Suchkriterien in MongoDB ?
Dokument:

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

oder

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

So möchte ich, um dieses Dokument bei einer Suchabfrage so etwas kommt:

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

oder

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

Also, wenn Sie das Dokument hat einige Platzhalter, ich will es passen, für eine Kriterien passenden Muster.

InformationsquelleAutor Abhijeet | 2016-06-29



One Reply
  1. 2

    Für wildcards wie diese, können Sie die regex Aussehen würde, so etwas wie:

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

    Aber wenn ich verstehe deine Frage richtig, haben Sie eine single Dokument in Ihre Sammlung mit einem Weg der {"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"}). Um dies zu tun, ist es wahrscheinlich am besten, dass Sie tun, suchen Sie ersetzt vor der Suche ändern Sie die Abfrage so gerne.

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

    Hoffe, das hilft!


    Bearbeiten, basierend auf Kommentare

    Tun, ein reverse-wildcard-match die folgenden arbeiten sollten, der Rückkehr zu dem angeforderten Dokument und keine passenden Platzhalter. Sie müssen definieren, was jeder tatsächlichen Platzhalter sind für diese zu arbeiten.

    path.replace(/foo\/bar\/(.*)\/somethingelse/, 'foo/bar/($1|{id}|\*)/somethingelse')
    db.collection.find({path: new RegExp(path)})
    • Sammlung können mehrere Dokumente, wie {„path“:“foo/*/bar/ähnliches“} in diesem Fall ist die db.Sammlung.find({path:“foo/1/bar/ähnliches“}) sollte das Ergebnis Holen; im Grunde will ich umkehren wildcard.
    • Haben Sie noch Glück mit der aktualisierten Antwort?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.