Tengo 2 colecciones.
1. usuario:
{
"_id": "111",
...,
"type": 1
}
2. consulta:
{
"_id": {
"$oid": "58bbf5bf17cc9100046b0dff"
},
"query": "some query",
"user_id": "111",
"links": []
}
Lo que quiero seleccionar: todas las consultas para algún tipo de usuario especial . Ahora selecciono a todos los usuarios con algún tipo de usuario e incluyo todas sus consultas como un campo; eso no es realmente lo que necesito.
db.collection('user').aggregate([
{$match : {'type': userType}},
{$lookup: {from: 'query', localField: '_id', foreignField: 'user_id', as: 'queries'}},
{$unwind: '$queries'}
], function(err, results) {...});
Gracias.
Editar:
Ejemplo: deseo seleccionar todas las consultas para los usuarios con type
1
. Entonces, la salida es como:
[{
"_id": {
"$oid": "58bbf5bf17cc9100046b0dff"
},
"query": "some query",
"user_id": "111",
"links": []
},
{
"_id": {
"$oid": "58bbf5bf17cc9100046b0dff"
},
"query": "some query",
"user_id": "111",
"links": []
}]
2 respuestas
Sería más fácil lograr esto con 2 consultas distintas:
- obtener una lista de usuarios
_id
que tienen el tipo deseado - obtener todas las consultas donde userId está en la lista
Aquí hay un script de muestra:
// filter users, and push all matching _id in listId field
var cursor = db.user.aggregate([{$match: {type: 1}}, {$group: {_id: null, listId: {$push: "$_id"}}}]);
if (cursor != null && cursor.hasNext()) {
var listId = cursor.next().listId;
// find queries where user_id is in listId
var result = db.query.find({user_id: {$in: listId}});
if (result != null && result.hasNext()) {
while (result.hasNext()) {
print(JSON.stringify(result.next()));
}
}
}
Para ejecutarlo, pegue el código en un archivo llamado script.js
, y luego ejecútelo desde su shell
mongo databaseName < script.js
Puedes probar debajo de la agregación.
db.collection('user').aggregate([
{$match : {'type': userType}},
{$lookup: {from: 'query', localField: '_id', foreignField: 'user_id', as: 'queries'}},
{$unwind: '$queries'},
{$replaceRoot:{newRoot:"$queries"}}
]
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.