Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

94
Vistas
Salida para cada resultado en la consola?

Tengo este comando en mongo cli, pero no obtengo ningún resultado:

 db.files.find({ state: 4, created : { '$gte': ISODate("2017-01-18T00:00:00.000Z"), '$lte': ISODate("2017-01-19T00:00:00.000Z") } }).forEach( function (o) { db.users.find({"id": ObjectId(o.user)},{"username": 1}).pretty(); });

¿Cómo saco el nombre de usuario en el cli?

 db.users.find({},{'id':1, 'username':1}).pretty(); { "_id" : ObjectId("5489b6abe4b0e66fc6491c85"), "username" : "user@domain.tld" } db.files.find({ }, {'id': 1, 'user': 1} ).pretty(); { "_id" : "--M17HJrR1m1svX6GZS-YQ", "user" : "56bfe199fe6cc47d0c2f8781" } { "_id" : "--bnG8eJTfiYE08xjDphmQ", "user" : "56c477a9da1173ce065abfbf" } { "_id" : "-0G2Q5fQQTCJhqEWjVkQYw", "user" : "57388a9b9ef0e2201245b265" }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Al ver que el campo de user en la colección de archivos es una cadena, no ObjectId , debe crear una lista de ObjectId , es decir, asignar las cadenas de identificación de user a una matriz de ObjectId con los que puede consultar la colección de users .

Por ejemplo, lo siguiente usa el método distinct() con un segundo argumento de consulta en ambas colecciones para producir matrices con las que puede consultar las referencias. Los resultados finales se imprimirán para consolar los nombres de usernames :

 var userIds = db.files.distinct("user", { "state": 4, "created" : { "$gte": ISODate("2017-01-18T00:00:00.000Z"), "$lte": ISODate("2017-01-19T00:00:00.000Z") } }).map(function(id) { return ObjectId(id); } ); db.users.distinct("username", {"_id": { "$in": userIds } }).forEach(printjson);

Si el campo de usuario es un ObjectId , utilice el operador $lookup del marco de agregación de la siguiente manera:

 db.files.aggregate([ { "$match": { "state": 4, "created": { "$gte": ISODate("2017-01-18T00:00:00.000Z"), "$lte": ISODate("2017-01-19T00:00:00.000Z") } } }, { "$lookup": { "from": "users", "localField": "user", "foreignField": "_id", "as": "userList" } }, { "$project": { "user": { "$arrayElemAt": ["$userList", 0] } } }, { "$project": { "username": "$user.username" } } ]).map(function(doc) { return doc.username; }).forEach(printjson);
over 4 years ago · Santiago Trujillo Denunciar

0

¿No debería ser "_id" en lugar de "id"?

 db.files.find({ state: 4, created : { '$gte': ISODate("2017-01-18T00:00:00.000Z"), '$lte': ISODate("2017-01-19T00:00:00.000Z") } }).forEach( function (o) { db.users.find({"_id": ObjectId(o.user)},{"username": 1}).pretty(); });

También creo que puede obtener toda la identificación y luego llamar a los operadores también

 var userIds = []; db.files.find({ state: 4, created : { '$gte': ISODate("2017-01-18T00:00:00.000Z"), '$lte': ISODate("2017-01-19T00:00:00.000Z") } },{user:1}).forEach( function (o) { userIds.push(new ObjectId(o.user)); }); db.users.find({"_id": {$in : userIds},{"username": 1}).pretty();

PD: el enfoque de Chridam es más favorable que cualquiera de estos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda