Node.js 使用HSET将JSON数据循环到Redis中

Node.js 使用HSET将JSON数据循环到Redis中,node.js,redis,Node.js,Redis,目前,我正在将mongoose查询中已经分页的数据添加到redis中,这样我就可以根据键'listings-page-'+currentPage来提取它。我正在尝试hget我刚刚循环到redis中的数据,但目前,当尝试使用该键返回所有结果时,它返回未定义的数据 我猜这是一个追加问题,但我还没有在相关命令中看到与为hset redis数据追加数据相关的命令。谢谢你的帮助 .then(documents => { for (let i = 0;

目前,我正在将mongoose查询中已经分页的数据添加到redis中,这样我就可以根据键
'listings-page-'+currentPage
来提取它。我正在尝试
hget
我刚刚循环到redis中的数据,但目前,当尝试使用该键返回所有结果时,它返回未定义的数据

我猜这是一个追加问题,但我还没有在相关命令中看到与为hset redis数据追加数据相关的命令。谢谢你的帮助

             .then(documents => {

          for (let i = 0; i < documents.length; i++) {

            let docs = JSON.stringify(documents[i]);
            let listingId = documents[i]._id.toString();
            client.hset('listings-page-' + currentPage, listingId, docs);


          }
          client.hget('listings-page-' + currentPage, (err, val) => console.log((val)));

。然后(文档=>{
for(设i=0;iconsole.log((val));

我认为这可能是因为异步循环行为

您是否尝试在集合上使用forEach迭代器编写该代码?它将如下所示:

    documents.forEach(document => {
client.hset('listings-page-' + currentPage,
document._id.toString(),
JSON.stringify(document));});
还有其他一些第三个包来处理承诺(如bluebird),它允许您处理一些其他场景,如竞争条件、并行迭代等

如果还有什么我能帮忙的,请告诉我

我的示例(需要在localhost:6379上运行redis)


我也尝试了forEach迭代器的方法,但它也返回未定义的。文档中肯定有数据。我已经构建了一个示例来重现相同的场景。它运行良好!我发现我的示例和您的示例之间的不同之处在于client.hget需要两个参数(key,field),hgetall只需要一个(key)。您需要哪一个?谢谢您的示例。指出hgetall和hget参数很有帮助。我想我弄错了。我可以使用2个参数从缓存中获取所有内容,并且可以使用
文档[2]执行hget。\u id.toString()作为第二个参数。谢谢帮助和解释!你考虑过使用ReDISJSON模块吗?
const redis = require('redis');

const client = redis.createClient(6379, 'localhost' );
client.on('connect', function() {
  console.log('Redis client connected');
  Save();
});

const documents =
  [{_id: '000'}, {_id: '654'}, {_id: '789'},
    {_id: '111'}, {_id: '222'}, {_id: '333'}];
/**
 *
 */
async function Save () {
  console.log('saving');
  const key = 'listings-page-1';
  await documents.forEach((document) => {
    client.hset(key,
        document._id.toString(),
        'lorem ipsum', (err, obj) => console.log(obj));
    console.log(key);
  });
  console.log('saved');
  client.hgetall(key, (err, val) => console.log((val)));
};