MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Giản đồ Mongoose đặt dấu thời gian trên tài liệu lồng nhau

Bạn cũng có thể áp dụng các tùy chọn dấu thời gian giản đồ mongoose cho các lược đồ bên trong.

Ví dụ:trong giản đồ sau, tôi đã áp dụng timestamps: true tùy chọn cho lược đồ đặt giá thầu bên trong.

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;

Bây giờ hãy kiểm tra nó:

Tôi đã tạo một tài liệu diễn đàn với mã sau:

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

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

Nội dung yêu cầu:

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

Phản hồi:(như bạn thấy dấu thời gian đều được áp dụng cho tài liệu gốc và tài liệu phụ)

{
    "_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
}

Bây giờ, hãy cập nhật điểm đặt giá thầu với _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 sẽ như thế này:http://.../forums/5e3073b3a2890b03b029e92c/biddings/5e3073b3a2890b03b029e92e

Yêu cầu:(có nghĩa là tôi muốn cập nhật điểm lên 50 của đấu thầu với _id:5e3073b3a2890b03b029e92e :

{
    "points": 50
}

Phản hồi:(như bạn thấy updatedAt giá trị trường của giá thầu được cập nhật đã tự động thay đổi từ 2020-01-28T17:47:31.376Z thành 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. Cập nhật bằng biểu thức thay vì giá trị

  2. Đặt cơ sở dữ liệu mặc định cho MongoDB shell

  3. Mongodb-go-driver / bson struct sang bson.Document encoding

  4. NodeJS / Mongoose / MongoDB - Kéo (từ mảng) không hoạt động

  5. Làm cách nào để tùy chỉnh MongoRepository mà không cần ghi đè các phương thức @Query được chú thích trong giao diện?