在嵌套数组nodeJs,MongoDB中推送数据

时间:2018-04-17 04:28:36

标签: arrays node.js mongodb mongoose mongodb-query

我有文档,

{
    "_id" : ObjectId("5ab4cc12c773133bae3d8dc9"),
    "__v" : 19.0,
    "geoGraphicalFilter" : {
        "aCountries" : [
            {
                "country" : "Spain",
                "_id" : ObjectId("5ad49ab21210c42aa6ccba23"),
                "cities" : [ ]
            },
            {
                "country" : "India",
                "_id" : ObjectId("5ad49ab21210c42aa6ccba24"),
                "cities" : [ ]
            }
        ]
    }
}

模型

const HuntingWindow = new Schema({
  geoGraphicalFilter: {
    aCountries: [
      {
        country: String,
        cities: { type: Array }
      }
    ]
  },
});

const addCityFilter = (req, res) => {
  if (req.body.aCities === "") {
    res.status(409).jsonp({ message: adminMessages.err_fill_val_properly });
    return false;
  } else {
    var Cities = req.body.aCities.split(",");
    huntingModel.update({ _id: req.body.id,"data.geoGraphicalFilter.aCountries":req.body.sName },
    {$push:{"geoGraphicalFilter.0.aCountries.$.cities":Cities}},
    (error, data) => {       
        // Cities.forEach(element => {
        //   data.geoGraphicalFilter.aCountries.find(req.body.sName)
        // });
      data.save((error, success) => {
        res.status(200).jsonp({
          message: adminMessages.succ_countryFilter_added
        });
      });
    });
  }
};

现在我想首先按root id查找文档,然后我想匹配country name并在数组中插入cities。我是MongoDB和nodejs的新手,我该怎么做?虽然我正在尝试使用更新查询,但我正在以错误的方式进行操作,请帮助我。

1 个答案:

答案 0 :(得分:3)

请尝试以下代码:

huntingModel.update(
    { _id: ObjectId("5ab4cc12c773133bae3d8dc9"), "geoGraphicalFilter.aCountries.country": "Spain"  },
    { $addToSet: { "geoGraphicalFilter.aCountries.$.cities": { $each: [ "city1", "city2" ] } } }
)

您应指定两个过滤条件:一个用于整个文档,另一个用于匹配数组元素。然后,您可以使用$运算符更新该数组中的第一个匹配文档。要推送多个值,您可以使用$each运算符。为确保不会出现重复,您应使用$addToSet