MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Схемата на Mongoose зададе времево клеймо на вложен документ

Можете също така да приложите опциите за времеви клеймове на схема на mongoose към вътрешните схеми.

Например в следната схема приложих timestamps: true опция за вътрешната схема за офериране.

const mongoose = require("mongoose");

const forumSchema = new mongoose.Schema(
  {
    title: { type: String, required: true },
    biddings: [
      {
        type: new mongoose.Schema(
          {
            biddingId: String,
            biddingPoints: Number
          },
          { timestamps: true }
        )
      }
    ]
  },
  { timestamps: true }
);

const Forum = mongoose.model("Forum", forumSchema);

module.exports = Forum;

Сега нека го тестваме:

Създадох документ във форума със следния код:

const Forum = require("../models/forum");

router.post("/forums", async (req, res) => {
  const result = await Forum.create(req.body);
  res.send(result);
});

Тяло на заявката:

{
    "title": "Title 1",
    "biddings": [
        {
            "biddingId": "bidding1",
            "biddingPoints": 10
        },
        {
            "biddingId": "bidding2",
            "biddingPoints": 30
        }
    ]
}

Отговор:(както виждате времевите клейма се прилагат както към родителския, така и към поддокументите)

{
    "_id": "5e3073b3a2890b03b029e92c",
    "title": "Title 1",
    "biddings": [
        {
            "_id": "5e3073b3a2890b03b029e92e",
            "biddingId": "bidding1",
            "biddingPoints": 10,
            "createdAt": "2020-01-28T17:47:31.376Z",
            "updatedAt": "2020-01-28T17:47:31.376Z"
        },
        {
            "_id": "5e3073b3a2890b03b029e92d",
            "biddingId": "bidding2",
            "biddingPoints": 30,
            "createdAt": "2020-01-28T17:47:31.376Z",
            "updatedAt": "2020-01-28T17:47:31.376Z"
        }
    ],
    "createdAt": "2020-01-28T17:47:31.376Z",
    "updatedAt": "2020-01-28T17:47:31.376Z",
    "__v": 0
}

Сега нека актуализираме точката за наддаване с _id:5e3073b3a2890b03b029e92e

router.put("/forums/:forumId/biddings/:biddingId",
  async (req, res) => {
    let points = req.body.points;

    try {
      let result = await Forum.findByIdAndUpdate(
        req.params.forumId,
        {
          $set: {
            "biddings.$[inner].biddingPoints": points
          }
        },
        {
          arrayFilters: [{ "inner._id": req.params.biddingId }],
          new: true
        }
      );

      if (!result) return res.status(404);

      res.send(result);
    } catch (err) {
      console.log(err);
      res.status(500).send("Something went wrong");
    }
  }
);

URL адресът ще бъде като този:http://.../forums/5e3073b3a2890b03b029e92c/biddings/5e3073b3a2890b03b029e92e

Заявка:(това означава, че искам да актуализирам точките до 50 от наддаването с _id:5e3073b3a2890b03b029e92e :

{
    "points": 50
}

Отговор:(както виждате updatedAt стойността на полето на актуализираното наддаване се промени автоматично от 2020-01-28T17:47:31.376Z до 2020-01-28T17:50:03.855Z )

{
    "_id": "5e3073b3a2890b03b029e92c",
    "title": "Title 1",
    "biddings": [
        {
            "_id": "5e3073b3a2890b03b029e92e",
            "biddingId": "bidding1",
            "biddingPoints": 50,
            "createdAt": "2020-01-28T17:47:31.376Z",
            "updatedAt": "2020-01-28T17:50:03.855Z"   ==> UPDATED
        },
        {
            "_id": "5e3073b3a2890b03b029e92d",
            "biddingId": "bidding2",
            "biddingPoints": 30,
            "createdAt": "2020-01-28T17:47:31.376Z",
            "updatedAt": "2020-01-28T17:47:31.376Z"
        }
    ],
    "createdAt": "2020-01-28T17:47:31.376Z",
    "updatedAt": "2020-01-28T17:50:03.855Z",
    "__v": 0
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Агрегираната рамка не може да използва индекси

  2. Как да актуализирам _id на един MongoDB документ?

  3. Можете ли да поставите mongo $push преди вместо добавяне?

  4. значение на sudo chown -R `id -u` /data/db

  5. MongoCursorTimeoutException за агрегатна функция