Saya ingin menggunakan paket shortid dari npm dengan luwak tetapi saya ingin tahu apakah mungkin menggunakan equals() dan bagaimana saya dapat menyematkan id saja, misalnya, saya memiliki pengguna dan saya ingin menyimpan dalam skema pengguna semua posting yang disukai (favShort dalam skema saya) dan kemudian mengisinya. Ini adalah skema saya yang menggunakan id objek untuk diisi. Tautan paket shortid https://www.npmjs.com/package/mongoose-shortid

  _id: {
    type: String,
    default: shortid.generate,
  },
  username: {
    type: String,
    lowercase: true,
    unique: true,
    required: true,
  },
  password: {
    type: String,
  },
  showNsfw: { type: Boolean, default: true },
  timezone: { type: String, default: 'CEST' },
  favShort: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Shortcut',
  }],
  email: {
    type: String,
    lowercase: true,
    unique: true,
    required: true,
  },
  permissionLevel: { type: Number, default: 1 },
  role: {
    type: String,
    enum: ['member', 'moderator', 'premium', 'admin'],
    default: 'member',
  },
  country: String,
},
{
  timestamps: true,
}); ```
0
Lucjan Grzesik 20 September 2019, 14:12

1 menjawab

Jawaban Terbaik

Jawabannya


Saya tidak yakin apakah itu akan membantu siapa pun, tetapi saya akan tetap memposting

Saya akhirnya menggunakan paket nanoid untuk ID dan untuk siput, saya telah menggunakan plugin untuk luwak plugin luwak-slug


Untuk referensi dari koleksi lain saat menggunakan paket nanoid, ketikkan string

favShort: [{
    type: String,
    ref: 'Shortcut',
  }],

Kode saya


Model

const mongooseSlugPlugin = require('mongoose-slug-plugin');
const mongoose = require('mongoose');
const nanoid = require('nanoid');

const postsSchema = new mongoose.Schema({
  _id: {
    type: String,
    default: () => nanoid(),
  },
  title: String,
  category: String,
  Description: String,
  className: String,
  description: String,
  date: { type: Date, default: Date.now },
  hidden: { type: Boolean, default: true },
  nsfw: { type: Boolean, default: false },
  apps: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'App',
    },
  ],
  user: {
    id: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'User',
    },
    username: String,
    country: String,
  },
  meta: {
    downloads: {
      type: Number,
      default: 0,
    },
    fav: {
      type: Number,
      default: 0,
    },
    views: {
      type: Number,
      default: 0,
    },
  },
  versions: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Version',
    },
  ],
  lastUpdate: Date,
});

postsSchema.plugin(mongooseSlugPlugin, { tmpl: '<%=title%>' });


module.exports = mongoose.model('Post', postsSchema);

Rute

router.get('/posts/:slug', (req, res) => {
  Post.findOne({slug: req.params.slug}).exec((err, f) => {
    if (err || !f) {
      console.log(err);
      res.redirect('back');
    } else if (f.versions.length === 0) {
      if (req.user === undefined) {
        res.redirect('back');
        // eslint-disable-next-line no-underscore-dangle
      } else if (f.user.id.equals(req.user._id)) {
        res.render('posts/show', {
          csrfToken: req.csrfToken(),
          f,
        });
      } else {
        res.redirect('back');
      }
    } else {
      const fS = f;
      if (req.cookies.cookieSeen === undefined) {
        fS.meta.views += 1;
        fS.save();
        res.cookie('cookieSeen', fS._id, optionsCookie);
        console.log(`set cookie and added views ${fS.meta}`);
      } else {
        console.log(`already seen this ${fS.title}`);
      }
      res.render('posts/show', {
        f,
        csrfToken: req.csrfToken(),
      });
    }
  });
});
1
Lucjan Grzesik 21 September 2019, 11:24