yo tengo una mesa asi
person = { name : String, favoriteFoods : [{type:Schema.Types.ObjectId, ref:'Food'}] }P1: Me gustaría realizar una búsqueda rápida cuando busco a una persona con una comida favorita en particular.
¿Puedo saber si es posible indexar el campo de alimentos favoritos y cómo hacerlo?
P2: Alternativamente, me gustaría completar los campos de alimentos favoritos con contenido de alimentos cuando recupere los documentos de la persona. ¿Puedo saber si hay un comando para hacerlo?
Sí, puede indexar un campo de matriz. Es lo que se llama un índice multiclave, pero en realidad básicamente está creando un índice normal. Detrás de escena, Mongo aplana la matriz y crea un índice separado para cada elemento.
Para el segundo trimestre, la forma más fácil de "rellenar" documentos en Mongo es mediante el uso de la etapa de $búsqueda durante la agregación, así:
db.person.aggregate([ { $match: { name: "tom" } }, { "$lookup": { "from": "foods", "localField": "favoriteFoods", "foreignField": "_id", "as": "favoriteFoods" } } ]) Sin embargo, si primero busca el documento, puede hacer una segunda llamada de base de datos a la otra colección para completar su campo, así es como lo hace mongoose , por ejemplo, con su opción de completar.