(javascript)
hola, tengo una colección mongodb que tiene este esquema:
{ _id: "any", ids: { user: "some value who can repeat" // and more keys but i will use this key here }, time: 400 // can vary }Necesito obtener algunos documentos de esta colección, filtrar a "tiempo inferior a 700" y no repetir la clave "usuario"
Traté de usar herramientas js para esto, pero en solo 1 consulta de búsqueda obtengo +900 documentos
const ids = []; const query = (await Personagens.find({ time: { $lt: 700 }}).sort({ time: 1 })) .filter(x => { if (!ids.includes(x.ids.user)) { ids.push(x.ids.user); return true; } }).slice(0, 50)la salida que muestra +900 documentos en 1 consulta
así que quiero saber si tiene algún operador mongo db para filtrar claves repetidas (la clave ids.user ) y obtener solo 50 documentos (obs: uso mongoose)
db.collection.aggregate([ { "$match": { time: { "$gt": 700 } } }, { "$group": { "_id": "$ids.user", "doc": { "$push": "$$ROOT" } } }, { "$set": { "doc": { "$first": "$doc" } } }, { "$replaceWith": "$doc" } ])