Alterar o tipo de campo na agregação do mongoDB e $ lookup utiliza o índice nos campos ou não?
Estou executando junções no mongodb usando $ lookup, agora estou enfrentando um problema aqui. Eu tenho duas coleções, a primeira a conter, os usuários com todas as marcas de favoritos e a segunda contém todos os detalhes sobre as marcas. Agora, estou tentando retornar todos os detalhes de marcas marcadas pelo usuário.
user_bookmarked Coleção
{"mobile_no": "8971740148", "brands": ["5829c1df334d40e20e1d1c19", "5829c1df334d40e20e1d1c20", "5829c1df334d40e20e1d1c21"]}
marcas Coleção
{"_id": ObjectId("5829c1df334d40e20e1d1c19"), "brand_name": "Versace"}
{"_id": ObjectId("5829c1df334d40e20e1d1c20"), "brand_name": "Lee Cooper"}
{"_id": ObjectId("5829c1df334d40e20e1d1c21"), "brand_name": "Levis"}
Meu código de pipeline de agregação é fornecido abaixo
{ $match: { mobile_no: mobile_no }},
{ $unwind: { path: "$brands", includeArrayIndex: "brandsposition"}},
{ $lookup: {from: "brands",localField: "brands",foreignField: "_id",as: "user_bookmarks"}},
Agora, o problema que estou enfrentando é que o código acima não retorna nada, pois estou armazenando IDs de marcas como string na minha coleção user_bookmarked, mas não como ObjectId, para que nada esteja sendo retornado. Agora alguém pode me dizer como posso alterar o tipo de campo na consulta de agregação.
Segunda coisa que eu quero perguntar, por favor me diga quando usar $ lookup, então o mongodb utiliza o index no estrangeiro_field ou não. Porque eu corri acima do pipeline de agregação comexplicar: true mas eu não encontrei nenhum índice que foi utilizado pela consulta acima, eu recebi isso retornado pela saída.
db.user_bookmarked.runCommand('aggregate', {pipeline: [{ $match: { mobile_no: mobile_no }},
{ $unwind: { path: "$brands", includeArrayIndex: "brandsposition"}},
{ $lookup: {from: "brands",localField: "brands",foreignField: "_id",as: "user_bookmarks"}}], explain: true})
{
"waitedMS" : NumberLong(0),
"stages" : [
{
"$cursor" : {
"query" : {
"mobile_no" : "8971740148"
},
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.restaurants",
"indexFilterSet" : false,
"parsedQuery" : {
"mobile_no" : {
"$eq" : "8971740148"
}
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"mobile_no" : {
"$eq" : "8971740148"
}
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
}
}
},
{
"$unwind" : {
"path" : "$brands",
"includeArrayIndex" : "brandsposition"
}
},
{
"$lookup" : {
"from" : "brands",
"as" : "user_bookmarks",
"localField" : "brands",
"foreignField" : "_id"
}
}
],
"ok" : 1
}
Agora alguém pode me ajudar a sair daqui? Eu pesquisei sobre isso, que é como alterar o tipo de campo dentro da agregação e $ lookup utiliza índices, mas não encontrei nada útil, por favor me ajude a sair daqui pessoal. realmente apreciável.