繁体   English   中英

有可能做到这一点吗? MONGODB MONGOOSE 节点.JS

[英]Is posible to do this? MONGODB MONGOOSE NODE.JS

以这个集合为例

{ _id:1 ,hotelname:"hotelxd",rooms:17}
{ _id:2 ,hotelname:"hotelxd2",rooms:187}

我想在此文档中添加一个新字段,称为酒店大小,该字段取决于具有此条件的房间数量。

function classifyrhotel(rooms) {
if (rooms>=0 && rooms<=50) {
    return "Small hotel";
}
if (rooms>=51 && rooms<=100) {
    return "Medium hotel";
}
if (rooms>100) {
    return "Large hotel";
}

最终的数据库应该是这样的

 { _id:1 ,hotelname:"hotelxd",rooms:17,hotelsize:"Small hotel"}
{ _id:2 ,hotelname:"hotelxd2",rooms:187,hotelsize:"Large hotel"}

是的! 您可以将聚合管道与$addFields阶段和$switch运算符一起使用,然后使用$out阶段更新您的集合。

这是查询:

db.collection.aggregate([
  {
    $addFields: {
      hotelsize: {
        $switch: {
          branches: [
            {
              case: {
                $lte: [
                  "$rooms",
                  50
                ]
              },
              then: "Small hotel"
            },
            {
              case: {
                $lte: [
                  "$rooms",
                  100
                ]
              },
              then: "Medium hotel"
            }
          ],
          default: "Large hotel"
        }
      }
    }
  },
  {
    $out: "collection"
  }
])

你可以在这里测试它(没有 $out 阶段)

注意:此查询将更新您的整个集合,请先尝试(删除 $out 阶段将在不更新数据的情况下执行查询)

注意:从 MongoDB 4.2 开始,您可以在内部使用聚合管道执行更新操作 这个 $addFields 阶段必须完成这项工作,但我现在无法测试它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM