Me gustaría definir una etapa de agregación de $ project donde pueda indicarle que agregue un nuevo campo e incluya todos los campos existentes, sin tener que enumerar todos los campos existentes.
Mi documento se ve así, con muchos campos:
{
obj: {
obj_field1: "hi",
obj_field2: "hi2"
},
field1: "a",
field2: "b",
...
field26: "z"
}
Quiero hacer una operación de agregación como esta:
[
{
$project: {
custom_field: "$obj.obj_field1",
//the next part is that I don't want to do
field1: 1,
field2: 1,
...
field26: 1
}
},
... //group, match, and whatever...
]
¿Hay algo como una palabra clave "incluir todos los campos" que pueda usar en este caso, o alguna otra forma de evitar tener que enumerar cada campo por separado?
mongodb
mongodb-query
aggregation-framework
samuelluis
fuente
fuente
Respuestas:
En 4.2+, puede usar el
$set
operador de canalización de agregación que no es más que un alias para$addFields
agregar en 3.4fuente
$addFields
es nuevo en MongoDB 3.4, que es compatible con la versión 2.5+ del controlador C #IAggregateFluent<TResult>.AppendStage(new JsonPipelineStageDefinition<TInput, TOutput>("{ $addFields : { myField: 'myValue' }}")
Puede usar $$ ROOT para hacer referencia al documento raíz. Mantenga todos los campos de este documento en un campo e intente obtenerlo después de eso (dependiendo de su sistema cliente: Java, C ++, ...)
fuente
document
una opción para crear un documento combinado hubiera sido mejor ...custom_field
adjunto.const newObj = { ...result.document, custom_field: result.custom_field }
>>> ¿Hay algo como la palabra clave "incluir todos los campos" que puedo usar en este caso o alguna otra solución?
Desafortunadamente, no hay operador para "incluir todos los campos" en la operación de agregación. La única razón es porque la agregación se crea principalmente para agrupar / calcular datos de los campos de la colección (suma, promedio, etc.) y devolver todos los campos de la colección no es un propósito directo.
fuente
posts
con _id, título, cuerpo, me gusta campos. El campo Me gusta es una matriz de _id de usuario a quien le gusta la publicación. ¿Cómo podrías enumerar todas las publicaciones con todos los _id, title, body, likeCount? Devolver todos los campos es un propósito directo en este caso.A partir de la versión 2.6.4, Mongo DB no tiene esa función para la
$project
canalización de agregación. De los documentos para$project
:y
fuente
Para agregar nuevos campos a su documento, puede usar
$addFields
de los documentos
y a todos los campos en su documento, puede usar
$$ROOT
fuente
de acuerdo con la respuesta de @Deka, para c # mongodb driver 2.5 puede obtener el documento agrupado con todas las teclas como a continuación;
fuente