mongoDB查找,更新和拉入一个查询

时间:2018-04-19 09:01:01

标签: node.js mongodb mongoose mongodb-query

我想从集合中找到所有数据,然后想要更新某些字段以及根据想要清空数组。

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(","); // It will make array of Cities
    const filterType = { "geoGraphicalFilter.filterType": "cities", "geoGraphicalFilter.countries": [], "geoGraphicalFilter.aCoordinates": [] };
    /** While using $addToset it ensure that to not add Duplicate Value
     * $each will add all values in array
     */
    huntingModel
      .update(
        {
          _id: req.body.id,
        },
        {
          $addToSet: {
            "geoGraphicalFilter.cities": { $each: Cities }
          }
        },
        {$set:{filterType}},
      ).then(function(data) {
        res.status(200).jsonp({
          message: adminMessages.succ_cityFilter_added
        });
      });
  }
};

集合

geoGraphicalFilter: {
    filterType: {
      type:String,
      enum: ["countries", "cities", "polygons"],
      default: "countries"
    },
    countries: { type: Array },
    cities: { type: Array },
    aCoordinates: [
      {
        polygons: { type: Array }
      }
    ]
  }

但结果是,唯一的城市阵列正在获得更新。 filterType没有变化。

1 个答案:

答案 0 :(得分:1)

您似乎正在传递$set filterType作为options参数,而不是更新参数。

huntingModel
  .update(
    {
      _id: req.body.id,
    },
    {
      $addToSet: {
        "geoGraphicalFilter.cities": { $each: Cities }
      },
      $set: {
        filterType
      }
    }
  ).then(function(data) {
    res.status(200).jsonp({
      message: adminMessages.succ_cityFilter_added
    });
  });