696 Stimmen

Finden Sie ein Dokument mit einem Array, das einen bestimmten Wert enthält

Wenn ich dieses Schema habe...

person = {
    name : String,
    favoriteFoods : Array
}

... wo das favoriteFoods Array mit Strings gefüllt ist. Wie kann ich alle Personen finden, die "Sushi" als Lieblingsessen haben, unter Verwendung von Mongoose?

Ich hatte auf etwas Ähnliches gehofft:

PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});

(Ich weiß, dass es kein $contains in mongodb gibt, erkläre nur, was ich erwartet habe, bevor ich die Lösung kannte)

1voto

Hiran D.A Walawage Punkte 1734

Mit populate & $in wird dieser Code nützlich sein.

ServiceCategory.find().populate({
    path: "services",
    match: { zipCodes: {$in: "10400"}},
    populate: [
        {
            path: "offers",
        },
    ],
});

-8voto

Alingenomen Punkte 1

Wenn Sie etwas wie einen "contains" Operator über JavaScript verwenden möchten, können Sie jederzeit eine reguläre Ausdruck dafür verwenden...

Zum Beispiel, wenn Sie einen Kunden mit dem Namen "Bartolomew" abrufen möchten

async function getBartolomew() {
    const custStartWith_Bart = await Customers.find({name: /^Bart/ }); // Beginnt mit Bart
    const custEndWith_lomew = await Customers.find({name: /lomew$/ }); // Endet mit lomew
    const custContains_rtol = await Customers.find({name: /.*rtol.*/ }); // Enthält rtol

    console.log(custStartWith_Bart);
    console.log(custEndWith_lomew);
    console.log(custContains_rtol);
}

-26voto

user3027146 Punkte 53

Ich weiß, dieses Thema ist alt, aber für zukünftige Personen, die sich die gleiche Frage stellen könnten, könnte eine weitere unglaublich ineffiziente Lösung sein:

PersonModel.find({$where : 'this.favouriteFoods.indexOf("sushi") != -1'});

Dies umgeht alle Optimierungen von MongoDB, also nicht in Produktionscode verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X