首页 > 解决方案 > 根据嵌套数组中的特定元素匹配人员

问题描述

我有一个这样的 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. 但是,我希望能够返回所有具有相同电影兴趣的人。有没有办法我可以做到这一点?

标签: javascriptnode.jsmongodbexpress

解决方案


如果我正确理解您的问题,您可以使用 $in 来获取与至少一个值匹配的所有文档,这是一个示例:

      db.collection('user').find({
        gender: interest,
        movie: { $in: movies}
    })

小提琴


推荐阅读