Javascript 使用MongoDB mongoose的正确方法是什么?
试图创建一个小项目,但在填充方面有点困难。我想在用户和项目之间创建一个关系。在这一点上,保存新用户是否是一个好的做法,然后我可能应该保存新项目,然后按属性查找用户并填充到项目?或者也许还有别的方法?我一直试图“追随”其他人的榜样,但还是被困在其中 目前我有User.jsJavascript 使用MongoDB mongoose的正确方法是什么?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,试图创建一个小项目,但在填充方面有点困难。我想在用户和项目之间创建一个关系。在这一点上,保存新用户是否是一个好的做法,然后我可能应该保存新项目,然后按属性查找用户并填充到项目?或者也许还有别的方法?我一直试图“追随”其他人的榜样,但还是被困在其中 目前我有User.js const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema({ name: { type
const mongoose = require("mongoose");
const UserSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
lastname: {
type: String,
required: true,
},
personalCode: {
type: String,
required: true
},
userGoods: {
type: mongoose.Schema.Types.ObjectId,
ref: "Item",
},
date: {
type: Date,
default: Date.now,
},
});
module.exports = User = mongoose.model("user", UserSchema);
这也是我的Item.js
const mongoose = require("mongoose");
const ItemSchema = new mongoose.Schema({
itemName: {
type: String,
required: true
},
itemComments: {
type: String,
},
itemQuantity: {
type: Number,
required: true,
},
itemPraba: {
type: Number,
},
itemWeight: {
type: Number,
},
moneyReceived: {
type: Number,
required: true
},
percentages: {
type: Number,
required: true
},
moneyReturn: {
type: Number,
required: true
},
itemImei: {
type: String,
},
date: {
type: Date,
default: Date.now,
},
})
module.exports = Item = mongoose.model("item", ItemSchema);
这是我的items.js
const express = require("express");
const {check, validationResult} = require("express-validator");
const router = express.Router();
const auth = require("../../middlewares/auth")
const bcrypt = require("bcryptjs");
// Item model
const Item = require("../../models/Item");
// User model
const User = require("../../models/User");
/**
* @Route POST api/items
* @Desc Create new item
* @Access Private
*/
router.post("/", [auth,
check("name", "Name is required!").not().isEmpty(),
check("lastname", "Lastname is required").not().isEmpty(),
check("personalCode", "Personal user code is required!").not().isEmpty(),
],
async (req, res) => {
// Handle errors
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({errors: errors.array()});
}
// Destruct body request
const {
name,
lastname,
personalCode,
itemName,
itemComments,
itemQuantity,
itemPraba,
itemWeight,
moneyReceived,
percentages,
moneyReturn,
itemImei
} = req.body;
try {
// Check for already existing user, if user exists - UPDATE
let user = await User.findOne({personalCode: personalCode});
if (user) {
// TODO update user with new items
} else {
// Build item object
const itemFields = {};
if (itemName) itemFields.itemName = itemName;
if (itemComments) itemFields.itemComments = itemComments;
if (itemQuantity) itemFields.itemQuantity = itemQuantity;
if (itemPraba) itemFields.itemPraba = itemPraba;
if (itemWeight) itemFields.itemWeight = itemWeight;
if (moneyReceived) itemFields.moneyReceived = moneyReceived;
if (percentages) itemFields.percentages = percentages;
if (moneyReturn) itemFields.moneyReturn = moneyReturn;
if (itemImei) itemFields.itemImei = itemImei;
// Create new user
user = new User({
name,
lastname,
personalCode
});
// Hash personal code
const salt = await bcrypt.genSalt(10);
user.personalCode = await bcrypt.hash(personalCode, salt);
// Save user
await user.save();
// Is it possible to do like this? Or I should be doing in other way?
// await User.findOne({name: name}).populate(`${itemFields}`);
}
} catch (error) {
console.error(error.message);
res.status(500).send("Server error occurred");
}
}
)
module.exports = router;