Hace poco me enteré de la existencia de la palabra clave RETURNING en N1QL. Cuando lo añades al final de una consulta N1QL, esa consulta devolverá el conjunto de resultados sobre el que se ha operado. Por ejemplo, si utilizas un UPDATE, y esa consulta actualiza 10 documentos, el RETURNING devolverá esos 10 documentos.
Puede utilizarlo en sus aplicaciones .NET y .NET Core Couchbase aplicaciones.
Configuración básica
Esta entrada de blog asume que tienes Couchbase Server configurado localmente, un bucket creado llamado "default", y al menos un índice primario creado en ese bucket.
Nota: si estás teniendo problemas para empezar con Couchbase Server, o estás recibiendo errores, especialmente en lo que respecta a la indexación N1QL, es posible que desees revisar algunas de mis entradas del blog "Getting Started": Couchbase con Windows Parte 1 y Couchbase con Windows Parte 2 en particular.
Estoy utilizando un simple proyecto de consola .NET Core, con las mismas herramientas y configuración que utilicé en mi proyecto de Publicación en el blog de .NET Core con Visual Studio Code.
Codificación con .NET y N1QL
La mayor parte de este código debería ser bastante familiar si has usado .NET y Couchbase antes. Estoy creando 5 documentos que tienen (inicialmente) un campo procesado establecido en falso
. El código siguiente los inserta. También los escribe en la consola con fines ilustrativos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
para(var i = 0;i < 5; i++) { var docKey = Guía.NuevaGuid().ToString(); var docContenido = nuevo { foo = "bar", tipo = "ejemplo", procesado = falso, dt = FechaHora.Ahora }; var docContentJson = JsonConvert.SerializarObjeto(docContenido); cubo.Inserte(nuevo Documento { Id = docKey, Contenido = docContenido }); Consola.WriteLine($"Insertado: {docKey} - {docContentJson}"); } |
A continuación, este código ejecuta inmediatamente un N1QL ACTUALIZACIÓN
para fijar todos los procesado
a verdadero. También tiene un DEVOLVER
al final para devolver los documentos y las claves.
1 2 3 4 5 6 7 8 |
var n1ql = @"UPDATE `default` d SET procesado = true WHERE d.type = 'ejemplo' AND d.processed = false RETURNING d.*, META().id AS docKey"; var consulta = Solicitud de consulta.Cree(n1ql); consulta.Consistencia de escaneado(Consistencia de escaneado.SolicitarPlus); var resultados = cubo.Consulta(consulta); |
Por último, el siguiente código imprime el JSON devuelto en la consola con fines ilustrativos.
1 2 3 4 |
foreach(var resultado en resultados.Filas) { var resultJson = JsonConvert.SerializarObjeto(resultado); Consola.WriteLine($"Devuelto: {resultJson}"); } |
Ejecutar el programa
Para ejecutar este programa, basta con introducir ejecutar dotnet
en la ventana de la consola. Usted debe ver una salida como esta:

Resumen
En DEVOLVER
puede ahorrarle un paso al actualizar/insertar un grupo de documentos. Pruebe a experimentar con una ACTUALIZACIÓN
para ver qué ocurre. Por ejemplo, pruebe a utilizar FALTA
en lugar de depender de un indicador booleano como "procesado".
Si tiene alguna pregunta, deje un comentario o póngase en contacto conmigo en Twitter.