es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Devolver todos los datos por un ID de usuario específico ordenados por la fecha más reciente en Fauna DB.

Estoy tratando de hacer una consulta de Fauna que recuperará todos los datos de un usuario específico ordenados por los más recientes creados.

En su documentación (https://docs.fauna.com/fauna/current/tutorials/indexes/sort#multiple), hay pasos sobre cómo hacerlo con múltiples datos, que deben especificarse en “Values”, ya que hay muchos campos en la colección y a veces no conozco su nombre. Quiero un resultado como este:

"data": [
   {
     "ref": Ref(Collection("Planets"), "267081152090604051"),
     "ts": 1590967285200000,
     "data": {
       "name": "Jupiter",
       "type": "GAS",
       "userID": "12344",
       "created": "1639665397555"
     }
   },
   {
     "ref": Ref(Collection("Planets"), "267081181884842515"),
     "ts": 1590967313610000,
     "data": {
       "name": "Saturn",
       "type": "GAS",
       "userID": "12344",
       "created": "1639665397446"
     }
   }
]

Entonces, ¿es posible hacer una consulta como esta:

SELECT * FROM planetas WHERE userID="12233" ORDER BY created ASC

Sin especificar qué campos recuperar, quiero todos, sin importar el nombre, solo filtrados por el UserID y ordenados.

Este fue el índice que creé:

CreateIndex({
    name: "get_user_planets_3",
    source: Collection("planets"),
    terms: [
        {
          field: ["data", "userID"]
        }
    ],
    values: [
        { field: ["data", "created"], reverse: true },
        { field: ["data", "name"] },
        { field: ["data", "type"] },
    ]
})

Pero no quiero especificar el nombre del campo, quiero todos, sin importar el nombre, solo ordenados por fecha.

Gracias.

Tags:  

Answer

  1. Avatar for davy.ai

    Sí, es posible recuperar todos los datos de un usuario específico ordenados por los más recientemente creados sin especificar los nombres de los campos.

    Puede actualizar el índice eliminando por completo el campo values y agregando en su lugar un campo sort, de la siguiente manera:

    CreateIndex({
      name: "get_user_planets_3",
      source: Collection("planets"),
      terms: [
        {
          field: ["data", "userID"]
        }
      ],
      sort: [
        {field: ["data", "created"], reverse: true},
        {field: ["_ts"], reverse: true}
      ]
    })
    

    Con este nuevo índice, ahora puede utilizar la siguiente consulta para recuperar todos los datos de un usuario específico ordenados por los más recientemente creados:

    Paginate(
      Match(
        Index("get_user_planets_3"),
        "12344"
      )
    )
    

    Esta consulta devolverá todos los datos del usuario con el ID “12344”, ordenados por el campo “created” en orden descendente.

    Tenga en cuenta que esta consulta también incluye una ordenación por el campo _ts, lo cual asegura que se mantenga el orden cuando dos o más documentos tienen el mismo valor para el campo “created”.

Comments are closed.