javascript - 如何在 MongoDB 中通过 ._id 过滤掉用户帐户?
问题描述
我正在创建一个火种克隆,当用户返回使用该应用程序时,我想过滤掉其他喜欢或不喜欢的用户帐户。
过滤器函数将 currentUser 和用户帐户作为参数,这些参数已由 GET 请求返回的结果传入。
如果当前用户在之前的会话中喜欢或不喜欢任何其他用户帐户,我希望过滤掉这些帐户,以便当前用户无法再次看到它们。
我已经在这工作了 3 周,尝试了多种不同的方式来循环遍历所有内容并比较结果,但我仍然无法让它正常工作。我现在所拥有的有点工作。但是,当您创建一个新帐户时,它会立即被过滤掉,而没有机会被喜欢或不喜欢。当一些用户被喜欢或不喜欢时也会发生同样的情况,但如果页面被留下但随后重新调整给任何未被喜欢或不喜欢的用户,也会被删除。如何修复此功能以正常工作?或者有没有更好的方法来通过 ._id 过滤其他帐户?
获取请求
router.get( "/user/match/:id", authenticateUser, asyncHandler(async (req, res, error) => {
const currentUser = await User.findOne({ _id: req.params.id });
if (currentUser.gender === "Male" && currentUser.sexualPreference === "Straight") {
const users = await User.find({ gender: "Female", sexualPreference: "Straight"});
filter(currentUser, users, req, res, error);
};
})
);
过滤功能
const filter = async (currentUser, users, req, res, error) => {
try {
if (currentUser.likes.length > 0) {
for (const user of users) {
for (const like of currentUser.likes) {
if (user._id.equals(like)) {
const index = users.indexOf(user);
users.splice(index, 1);
console.log(users)
}
}
}
}
else if (currentUser.dislikes.length > 0) {
console.log("dislikes")
for (const user of users) {
for (const like of currentUser.dislikes) {
if (user._id.equals(like)) {
const index = users.indexOf(user);
users.splice(index, 1);
console.log(users)
}
}
}
} else {
return res.json({ users });
}
} catch (error) {
console.log(error, "error");
}
};
当前用户
{
matches: [],
likes: [
'615080280d6b7c913824bf5d',
'61507fec0d6b7c913824bf5c',
'61508c3d1fb5b195c62a424b',
'6150906c0709f697acb19ae3'
],
dislikes: [
'61509280068887983227015f',
],
_id: 615080750d6b7c913824bf5f,
firstName: 'Daenerys',
lastName: 'Targeryen',
emailAddress: 'Daenerys@gmail.com',
password: '$2a$10$BHZpaTKvmXp5xxDx.z1vReZ9ae922YUgn2ZDha0ou9yxe1jlXAZ6q',
gender: 'Female',
sexualPreference: 'Straight',
age: 26,
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
path: 'uploads/1632665717723.jpg',
__v: 0
}
用户
[
{
matches: [],
likes: [],
dislikes: [],
_id: 61507fec0d6b7c913824bf5c,
firstName: 'Jon',
lastName: 'Snow',
emailAddress: 'JonSnow@gmail.com',
password: '$2a$10$IrnMgY6dlzftULIYNy/SWOAGalXZ30/bO78BPnaSmIT65bniQ.9pO',
gender: 'Male',
sexualPreference: 'Straight',
age: 26,
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
path: 'uploads/1632665580169.jpg',
__v: 0
},
{
matches: [],
likes: [],
dislikes: [],
_id: 615080280d6b7c913824bf5d,
firstName: 'Robb',
lastName: 'Stark',
emailAddress: 'RobbStark@gmail.com',
password: '$2a$10$FrBMQFj4DDbx4j9qk7iK9e.YRwSC6wd2t7QczrPEteOEniPNMqzi2',
gender: 'Male',
sexualPreference: 'Straight',
age: 26,
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
path: 'uploads/1632665640435.jpg',
__v: 0
},
{
matches: [],
likes: [],
dislikes: [],
_id: 61508c3d1fb5b195c62a424b,
firstName: 'Stannis',
lastName: 'Baratheon',
emailAddress: 'Stannis@gmail.com',
password: '$2a$10$8poGckIRWmuM20a97FS4HuugGwz9eocL5YfLZL46V4qi5Bk/czyQe',
gender: 'Male',
sexualPreference: 'Straight',
age: 40,
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
path: 'uploads/1632668733813.jpg',
__v: 0
},
]
解决方案
您正在使用Users.find
from mongodb 列出用户,但该函数实际上返回一个游标而不是文档数组。
const users = await User.find({ gender: "Female", sexualPreference: "Straight"});
可以成为。
const users = await User.find({ gender: "Female", sexualPreference: "Straight"}).toArray();
但是,我建议查看驱动程序文档以查找文档。出于性能原因,可能有更好的方法来布局代码。 MongoDB 查找多个文档
推荐阅读
- php - 哪个是编写用于插入数据的 PHP 代码的更好方法
- android - 在 Android 中设置 Firebase reCAPTCHA 验证程序
- c# - Xamarin.Forms Frame 内容在 Android 中溢出
- app-store - 发布 Office 插件时出现问题
- java - 为什么这段代码不能实现从数据库的备份副本恢复 Derby 数据库的目标?
- python - 已解决:BeautifulSoup4 get_text() while scraping 在 mac 上有效,但在 raspbian 上返回空字符串
- tensorflow - 图像分类问题中的 KerasTuner
- node.js - 为 gm 上传文件时可以获取缓冲区或流吗?
- java - java.awt.Rectangle#intersects(Rectangle r) 丑陋的实现?
- amazon-web-services - 如何将 PowerBI 连接到 AWS dynamodb?