Вот пример того, как вы можете это сделать (имейте в виду, что вам не нужно определять поле id, так как mon go добавит его автоматически):
- mongodb. js - -
const mongoose = require('mongoose');
// Connect to database. (replace username, password and dbname).
mongoose.connect('mongodb://username:password@localhost:27017/dbname', {
useNewUrlParser: true,
useFindAndModify: false,
useCreateIndex: true,
autoIndex: false,
useUnifiedTopology: true
})
.then(() => console.log('Connected to mongodb...'))
.catch(err => console.error(err));
// Define user schema.
const UserSchema = new mongoose.Schema({
username: {
type: String,
unique: true,
index: true
},
password: String
});
// Define virtual field ( it "connects" two collections ( collections are like tables in MYSQL ) ).
UserSchema.virtual('wishlists', {
ref: 'Wishlists',
localField: '_id',
foreignField: 'userid'
}, {
toObject: {
virtuals: true
},
toJSON: {
virtuals: true
}
});
// Define wishlist schema with field "userid" that references a user in "Users" collection.
const WishlistSchema = new mongoose.Schema({
userid: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Users'
},
wish: String
});
// Create collections called "Users" and "Wishlists" and export for use.
module.exports = {
User: mongoose.model('Users', UserSchema),
Wishlist: mongoose.model('Wishlists', WishlistSchema)
};
И затем вы можете использовать это на своем NodeJS сервере (вашем API), используя эти строки в качестве примеров:
const Models = require('./mongodb.js');
const User = Models.User;
const Wishlist = Models.Wishlist;
// Add new.
await new User({
name: name,
password: password
}).save();
// Find user by id.
await Users.findById('someid')
.select();
// Find wishlists by userid and find user ( but keep out password! ).
await Wishlist.find({
userid: 'someid'
}).select().populate('userid', 'username');
// Find user and all wishlists associated (using virtual fields from mongodb ).
await Users.findById('someid')
.select().populate('wishlists');