mongoose 尝试只显示mongodb数据库中存储的日期的年份,如何做到这一点?

nwwlzxa7  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(104)

我正在创建一个网站。在我的服务器内有一个mongoose模型,它在mongo数据库中保存不同的数据,例如出生日期。日期以ISODate格式存储。但我想在客户端内的react组件中只使用年或月。我怎么做?有什么方法可以在从mongodb调用的react组件中格式化日期吗?

import mongoose from 'mongoose';

const listingSchema = new mongoose.Schema(
    {
        givenname: {
            type: String,
            required: true,
        },
        familyname: {
            type: String,
            required: true,
        },
        dateofbirth: {
            type: Date,
            required: true,
        },
        dateofpassing: {
            type: Date,
            required: true,
        },
        imageUrl: {
            type: String,
            default: "https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png"
        },
        userRef: {
            type: String,
            required: true,
          },

    }, {timestamps: true}
)

const Listing = mongoose.model('Listing', listingSchema);

export default Listing;

个字符

pobjuy32

pobjuy321#

您可以更新架构以包含virtuals
这会将计算属性添加到你的文档中,你可以在你的React前端使用。这些属性不会显示在mongodb中,所以你不能查询它们,只能使用mongoose输出。
注意,我已经为您包含了toJSON: { virtuals: true }选项,因为否则当您将文档转换为JSON以通过网络发送时,默认情况下虚拟对象不是JSON对象的一部分。

const listingSchema = new mongoose.Schema(
   {
      //...
      dateofbirth: {
         type: Date,
         required: true,
      },
      //...
      //..
   }, 
   {
      timestamps: true,
      toJSON: {
         virtuals: true
      },
      virtuals: {
         yearOfBirth: {
            get() {
               const nd = new Date(this.dateofbirth);
               return nd.getFullYear();
            },
         },
         monthOfBirthDigit: {
            get() {
               const nd = new Date(this.dateofbirth);
               return nd.getMonth()+1; // +1 because Jan is 0 (0-11)
            },
         },
         monthOfBirthShortWord: {
            get() {
               const nd = new Date(this.dateofbirth);
               return nd.toLocaleString('default', { month: 'short' });
            },
         }
      }     
   }
)

字符串
当你询问他们的时候,

const document = await Listing.findById(id);
console.log(document.yearOfBirth);
// 1980
console.log(document.monthOfBirthDigit);
// 10
console.log(document.monthOfBirthShortWord);
// Oct

相关问题