【问题标题】:Find all subdocuments that match with node.js mongodb查找与 node.js mongodb 匹配的所有子文档
【发布时间】:2017-08-21 07:45:03
【问题描述】:

我目前的架构如下:

var User = new Schema({
    id: String,
    firstName: String,
    lastName: String,
    password: String,
    username: String,
    position: [{
          title: String,
          location: String,
          start: String,
          term:Number,
          description:String,
                    date: {type: Date, default: Date.now}
  }]

});

我有两个用户,每个用户都有两个嵌入的职位文档。

用户1:

"position" : [ 
    {
        "title" : "Business Analyst",
        "location" : "Dublin",
        "start" : "May 2017",
        "term" : 6,
        "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi",
        "_id" : ObjectId("58d6b7e11e793c9a506ffe0f")
    }, 
    {
        "description" : "description",
        "term" : 12,
        "start" : "may 2018",
        "location" : "Dublin",
        "title" : "Web Developer",
        "_id" : ObjectId("58d6af99e4318f4703ceb2af")
    }
],

用户2:

"position" : [ 
    {
        "title" : "Software Engineer",
        "location" : "Cork",
        "start" : "May 2017",
        "term" : 9,
        "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in miorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi"

    }, 
    {
        "title" : "Web Developer",
        "location" : "Waterford",
        "start" : "May 2017",
        "term" : 6,
        "description" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis erat vitae dsit amet, consectetur adipiscing elit. Vivamus quis erat vitae dolor tempus euismod non in mi"
    }
],

但是,如果我搜索“Web Developer”,我似乎只能返回第一个用户(我明白为什么会返回整个文档),但我可以进行搜索并获取与字符串“Web”匹配的所有子文档开发商'? 我正在使用 Ajax,我的帖子查询如下:

    app.post('/search', function (req, res) {

  User.find({'position.title':req.body.position}).exec(function (err, result) {
    res.send({ results: result });
});
});

返回对象:

【问题讨论】:

标签: node.js mongoose


【解决方案1】:

为了只返回子文档,您必须将该字段作为第二个参数传递给.find 函数。

var position = new RegExp(req.body.position, 'i');

User.find({'position.title': position}, 'position.$')
.exec(function (err, result) {
});

【讨论】:

  • 太棒了!只是一个简单的问题,我已经更新了我的问题以显示我要返回的对象,但是我如何访问这些信息?我最初使用的是 data.results[i].position[i].title 但它的结构有点不同,我似乎无法让它工作?它的“数据”部分也来自 ajax 调用,结果就是我从查询返回的内容。
  • 我已经更新了答案。在选择字段更改为'position.$'
  • 我刚刚测试了代码并更新了我的数据库,为第一个用户提供了 2 个“Web 开发人员”条目,为第二个用户提供了一个条目,但我似乎只能从中获取一个每个用户?
猜你喜欢
  • 2018-08-20
  • 2021-07-20
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 2023-03-20
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多