javascript - 根据嵌套数组中的特定元素匹配人员
问题描述
我有一个这样的 MongoDB 集合:
_id: ObjectId("5cb089e459552d8b8cc6a9e4")
username: "admin"
password: "12345"
gender: "male"
interestedIn: "female"
movie: Array
0: Object
id: "Avatar"
title: "Avatar"
poster: "~"
1: Object
id: "Titanic"
title: "Titanic"
poster: "~"
我还有两个像这样的人(女性),一个有“阿凡达”,另一个有“泰坦尼克号”的电影兴趣。现在我想根据人们感兴趣的性别以及他们对电影的兴趣相同的时间来匹配人们。我为此尝试的功能如下:
function matches(req, res) {
db.collection('user').find({ 'username': req.session.user.username })
.toArray(function(err, data) {
if (err) {
console.log('An error has occurred', err);
} else {
let interest = data[0].interestedIn;
let movies = data[0].movie;
db.collection('user').find({
gender: interest,
movie: { $elemMatch: { id: 'Avatar' }}
}).toArray(function(err, data) {
res.render('matches.pug', {
data,
user: req.session.user,
interest,
movies
});
});
}
});
}
当我运行这段代码时,我只得到了一个女孩,自从我id: 'Avatar'
在$elemMatch
. 但是,我希望能够返回所有具有相同电影兴趣的人。有没有办法我可以做到这一点?
解决方案
如果我正确理解您的问题,您可以使用 $in 来获取与至少一个值匹配的所有文档,这是一个示例:
db.collection('user').find({
gender: interest,
movie: { $in: movies}
})
推荐阅读
- javascript - SendGrid 客户端 TypeScript 错误:HttpMethod
- javascript - 来自映射对象 onClick 的数据 - React
- java - Java create new instance of class based on another class
- c - 是什么让 Printf 打印两次?
- angular - 为什么拖放在此 PrimeNG 树中不起作用?
- python - Python Boto3 使用 NextToken 通过路径从 SSM 获取参数
- c# - 使用 LINQ 将子对象列表从连接表映射到父对象
- python - Dash RangeSlider 将步骤表示为日期
- python - 打印在python中保持在同一行
- python - Flask API 错误将 JSON 字符串转换为 pandas 数据帧