Se eu tiver esse esquema ...
person = {
name : String,
favoriteFoods : Array
}
... onde a favoriteFoods
matriz é preenchida com cadeias. Como posso encontrar todas as pessoas que têm "sushi" como comida favorita usando mangusto?
Eu esperava algo do tipo:
PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});
(Eu sei que não há $contains
no mongodb, apenas explicando o que eu esperava encontrar antes de conhecer a solução)
favouriteFoods
:favouriteFoods:[{type:Schema.Types.ObjectId, ref:'Food'}]
PersonModel.find({ favouriteFoods.text: "sushi" }, ...); person = { name : String, favouriteFoods : [{text:String}] }
Não há
$contains
operador no mongodb.Você pode usar a resposta de JohnnyHK como isso funciona. A analogia mais próxima de contém o mongo é
$in
: usando isso, sua consulta se pareceria com:fonte
$in
é usado quando você possui vários valores de consulta e o documento precisa corresponder a um deles. Pelo contrário (que é essa a questão), a resposta de JohnnyHK está correta. Eu estava com um voto negativo, mas acho que essa resposta pode ser útil para outras pessoas que acabam nesta página.PersonModel.find({favouriteFoods: {"$in": ["sushi", "hotdog"]}})
Eu sinto que
$all
seria mais apropriado nessa situação. Se você está procurando uma pessoa interessada em sushi, faça:Como você pode filtrar mais sua pesquisa, faça o seguinte:
$in
é como OR e$all
como AND. Verifique isto: https://docs.mongodb.com/manual/reference/operator/query/all/fonte
Caso a matriz contenha objetos, por exemplo, se
favouriteFoods
for uma matriz de objetos do seguinte:você pode usar a seguinte consulta:
fonte
Caso você precise encontrar documentos que contenham elementos NULL dentro de uma matriz de sub-documentos, encontrei esta consulta que funciona muito bem:
Esta consulta é retirada desta postagem: matriz de consulta MongoDb com valores nulos
Foi uma ótima descoberta e funciona muito melhor do que minha própria versão inicial e incorreta (que funcionou bem apenas para matrizes com um elemento):
fonte
Embora concordar com find () seja mais eficaz em seu caso de uso. Ainda há $ match of framework de agregação, para facilitar a consulta de um grande número de entradas e gerar um baixo número de resultados que agregam valor a você, especialmente para agrupar e criar novos arquivos.
fonte
O caso de lookup_food_array é array.
O caso de lookup_food_array é string.
fonte
Para o Loopback3, todos os exemplos dados não funcionaram para mim ou tão rápido quanto o uso da API REST. Mas isso me ajudou a descobrir a resposta exata que eu precisava.
{"where":{"arrayAttribute":{ "all" :[String]}}}
fonte
Se você quiser usar algo como um operador "contém" por meio de javascript, sempre poderá usar uma expressão regular para isso ...
por exemplo. Digamos que você queira recuperar um cliente que tenha "Bartolomew" como nome
fonte
Sei que esse tópico é antigo, mas para futuras pessoas que poderiam se perguntar a mesma pergunta, outra solução incrivelmente ineficiente seria:
Isso evita todas as otimizações do MongoDB, portanto, não use no código de produção.
fonte