Der Titel der Frage fasst meinen aktuellen Ansatz macht bei dem Versuch, Abfrage zu tun, dass die folgenden zu erreichen versucht:
„alle Dokumente dass die Textsuchkriterien entsprechen oder nicht und eine Reihe anderer Eigenschaften erfüllen“
Meine Anfrage unter:
var query = {
$or: [
{ $text: { $search: searchText } },
],
$and: [
{createdon: { $gte: start_date, $lt: end_date} },
{author: req.user._id}
]
};
Wenn eine leere Zeichenfolge durch den Benutzer gesendet wird die Abfrage liefert keine Ergebnisse, obwohl es in der Sammlung Dokumente gibt, die z t die Kriterien, die der Benutzer in der AND-Klausel in der Anfrage gesendet hat.
Also im Grunde kratze ich meinen Kopf, wie man die $ Textsuche von MongoDB mit einer leeren Zeichenfolge arbeiten kann.
Ich weiß, dass ich einfach vor dem Erstellen der Abfrage Text könnte, so etwas wie so:
var query;
if (!searchText.length) {
//We know there's no search text, so just use the conditions in the AND clause
query = {
createdon: { $gte: start_date, $lt: end_date},
author: req.user._id
};
Nur frage mich, ob ich diese gewünschte Funktionalität ohne bekommen kann die Abfrage Objekt innerhalb des Steuerflusses eines bedingten zu erstellen.
MongoDB indiziert keine Leerzeichen als Teil des Volltexts – Saleem
@Saleem Ich weiß, dass ich nach dem Betrachten der Dokumente mich frage, ob ich etwas falsch mit der Syntax des $ oder der Bedingung oder etwas entlang denen mache Linien .. Würden Sie sagen, die bedingte Deklaration der Abfrage ist der Weg zu gehen? –
Ihr zweiter Ansatz ist der beste Weg zu gehen. Es spart MongoDB für nichts hart arbeiten :) – Saleem