Первоначально я пытался добавить документы, возвращенные из User.find ({}), в кэш redis как отсортированный набор, чтобы я мог выполнять нумерацию страниц. вот так: client.zadd("directory", documents_id, docsString, (err, reply) => {
Я начинаю задумываться, нужно ли мне использовать hmset
, поскольку я имею дело с несколькими элементами в JSON объекте, но я не уверен, как запросить, если это тот случай. Я ищу лучшее решение, которое позже позволит мне разбивать данные на страницы, а также иметь ключевое слово, которое возвращает совпадающие значения в полях (если это возможно в любой степени с помощью redis)
app.get("/api/users", (req, res, next) => {
var searchKey = new RegExp(req.query.usernameSearch, "i");
console.log("CURRENT PAGE IS " + req.query.currentPage);
client.zrange("directory", 0, -1, (err, reply) => {
console.log("reply");
console.log(reply);
console.log(err);
if (err) {
res.status(401).json({
message: "Directory Cache Error!"
});
return;
} else if (reply) {
console.log("GRABBING FROM CACHE");
let packageReply = JSON.parse(reply);
console.log("packageReply");
console.log(packageReply);
let totatArtists = packageReply.length;
res.status(200).json({
message: "Grabbed from cache",
posts: packageReply,
maxPosts: totatArtists
});
} else {
console.log("GRABBING FROM DB");
User.countDocuments({
$and: [{ username: searchKey }, { role: "Seller" }]
}).then(docs => {
let totalPosts = docs;
let postPerPage = 20;
User.find({
$and: [{ username: searchKey }, { role: "Seller" }]
})
.select("_id username")
.skip(postPerPage * (currentPage - 1))
.limit(postPerPage)
.then(documents => {
let docsString = JSON.stringify(documents);
client.zadd(
"directory",
documents_id,
docsString,
(err, reply) => {
client.expire("directory", 3600);
res.status(200).json({
message: "Users retrieved successfully!",
posts: documents
});
}
);
});
});
}
});
пример вывода
[{ _id: 5e34482ce04d7c0ca4725f92, username: 'bob' },
{ _id: 5e344842e04d7c0ca4725f93, username: 'joe' },
{ _id: 5e383e5dace65e4774e646e1, username: 'bill' },
{ _id: 5e383e63ace65e4774e646e2, username: 'sue' }]