node.js - 使用 Mongoose (MongoDB) 查询嵌套文档

我开始使用 mongodb 并且很难尝试查询嵌套文档。我有两个架构:

var LinkSchema = new mongoose.Schema({
    url: String,
    name: String
});

var UserSchema = new mongoose.Schema({
    name: String,
    links: [LinkSchema]
});

如您所见,我只是想构建一个简单的书签工具。每个用户都有一个名称和一组链接。每个链接都有一个名称和一个 url。

现在,例如,我要做的是查看某人的链接数组中是否已经存在链接。我希望能够做这样的事情(尝试获取 vlad 的链接集合,然后查看查询链接是否已经属于该集合):

app.get("/:query", function(req, res){
  User.findOne({"name":"vlad"}, function(err, user){
    user.links.find({"url":req.params.query}, function(err, foundLinks){
      if(foundLinks){
        res.send("link already exists!");
      } else {
        res.send("link doesn't exist!");
      }
    });
  });
});

当然,这段代码不起作用,因为显然我不能执行“user.links.find()”。我想我可以只做一个 user.links.map 来只提取 url,然后对它运行成员资格查询。但我认为这远非正确的解决方案。必须有一种方法可以使用数据库查询在 native 上做这样的事情。有人可以帮忙吗?谢谢!

最佳答案

你可以像这样在 mongoose 中查询嵌入的文档

   User.find({'links.url':req.params.query}, function(err, foundUsers){
      // ---
   });

要找到属于用户“vlad”的链接,你可以写

   User.find({name:'vlad','links.url':req.params.query}, function(err, foundUsers){
      // ---
   });

这样就可以了。

https://stackoverflow.com/questions/13097266/

相关文章:

javascript - 使用 IntelliJ IDEA for JavaScript 的最佳插件

mongodb - 在MongoDB中将字段乘以值

.net - MongoDB事务?

mongodb - 使用 MongoEngine 排序?

mongodb - 如何将 MongoDB 副本集转换为独立服务器

mongodb - 如何使用 docker-compose 在 mongodb 中创建用户

node.js - 在 Mongoose 中创建外键关系

mongodb - 是否可以从集合中 mongodump 转储最后的 "x"记录?

mongodb - MongoDb 2.2、2.4 和 2.6 中的 Map-Reduce 性能

database - findOneAndUpdate 和 update 的 Mongoose 区别