Mongoose选择数组中的数组项

时间:2014-04-06 21:13:10

标签: node.js mongodb mongoose

我在尝试通过其id而不使用其父ID来选择数组元素时遇到问题。因此,以下面的示例为例,我想选择_id为5的部分来保存对它的更改。这是看起来像:

site: {
  menus: [
    {
      _id: 1
      sections:[
        { _id: 1 },
        { _id: 2 },
        { _id: 3 },
        { _id: 4 }
      ]
    },
    {
      _id: 2
      sections:[
        { _id: 5 }
      ]
    }
  ]
}

Schemas.Site.findOne({ _id: req.session.siteID, 'menus.sections._id': req.params.sectionID }).select('menus.$.sections').exec(function(err, site){
  if (err) return next(err);

  var section = site.menus[0].sections.id(req.params.sectionID);
  // update some things
  section.whatever = something;
  // save changes
  site.save();
});

问题是,这适用于第一个菜单数组,但不适用于第二个菜单数组。如果我在第二个菜单部分(_id:5)上尝试此操作,它会在第一个菜单中更新。我确定我已经接近了,但选择时可能存在问题。这些只是数组,而不是嵌入式模型。

更新:似乎选择工作正常。当我在console.log中输出section变量时,它在数组中有正确的项。调用save时会发生此问题。它会覆盖错误的项目。我没有保存中间件运行。

1 个答案:

答案 0 :(得分:0)

我现在使用menuID和sectionID来完成这项工作。我刚刚更新它看起来像这样:

var menu = site.menus.id(req.body.menuID),
    section = menu.sections.id(req.params.sectionID);

如果有更好的方法可以在不需要menuID的情况下执行此操作,我会暂时不回答这个问题。