Quiero usar NeDB como base de datos para una aplicación ExpressJS muy simple. Me gustaría almacenar colecciones de objetos en un archivo separado, por lo que un archivo para pedidos (orders.json). Sin embargo, cada vez que inserto un objeto de pedido en el almacén de datos, simplemente se agrega como un objeto adicional en lugar de crear una matriz.
var Datastore = require('nedb') , orders = new Datastore({ filename: __dirname + '/orders.json', autoload: true }); const order = { chatId: 4324234, url: 'https://google.com', maxPrice: 200, incrementPrice: 2, expiryHours: 24, timestamp: Date.now() } orders.insert(order); orders.insert(order);Esto almacena los objetos como:
{"chatId":1,"url":"https://google.com","maxPrice":200,"incrementPrice":2,"expiryHours":24,"timestamp":1631185683197,"_id":"mh9tdb06Tw29JXSW"} {"chatId":1,"url":"https://google.com","maxPrice":200,"incrementPrice":2,"expiryHours":24,"timestamp":1631185691156,"_id":"8Dg6GXFlygYMPmRZ"}Como ya puede ver, este es un JSON no válido. Espero que se almacenen en una matriz (una matriz que contiene todos los pedidos).
¿Cómo puedo lograr esto usando NeDB?
NeDB almacena documentos, no datos json, simplemente son similares. Sus archivos json necesitarán un contexto {} de nivel superior, mientras que su base de datos nedb no lo necesitará. Por lo tanto, debe almacenar los datos en archivos .db, no en archivos .json, ya que no está almacenando datos json. Cada vez que está insertando un pedido, está insertando un nuevo documento. Nunca le está diciendo a nedb que cree o envíe a una matriz, sino que está insertando nuevos documentos.
orders.find({}, (err, doc) => { console.log(doc); }) El código anterior devolverá todos sus datos insertados en una matriz. Si entiendo sus necesidades correctamente, podría pensar en los datos de los orders como una matriz implícita. Sus documentos no se recuperarán necesariamente en el mismo orden en que los insertó