使用Mongoose(MongoDB)查询嵌套文档

我从mongodb开始,努力查询嵌套的文档。 我有两个模式:

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

正如你所看到的,我只是搭build一个简单的书签工具。 每个用户都有一个名称和一组链接。 每个链接都有一个名称和一个url。

现在,我想要做的是,例如,看看某个链接是否已经存在于某人的链接数组中。 我想能够做这样的事情(试图获得弗拉德的链接集合,然后看看查询链接是否已经属于集合或不):

 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,然后运行一个成员资格查询。 但是我认为这样做远不是正确的解决办法。 有一种方法可以使用数据库查询本地执行此类操作。 有人可以帮忙吗? 谢谢!

你可以这样查询mongoose中的embedded式文件

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

并find属于用户“弗拉德”的链接,你可以写

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

这将做的伎俩。