我正在嘗試創建一個包含選定 objectId(用戶)的新物件(組)。幾天以來我一直頭疼,但我找不到正確的方法來做到這一點。組模型如下所示:
import mongoose from 'mongoose';
const groupSchema = new mongoose.Schema(
{
creator: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
title: { type: String },
members: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
],
},
{
timestamps: true,
}
);
const Group =
mongoose.models.Group || mongoose.model('Group', groupSchema);
export default Group;
這是用戶模型:
import mongoose from 'mongoose';
const userSchema = new mongoose.Schema(
{
name: { type: String },
},
{
timestamps: true,
}
);
const User =
mongoose.models.User || mongoose.model('User', userSchema);
export default User;
所以我希望用戶可以創建組,從串列中選擇現有用戶并將它們添加到成員陣列中。我了解如何創建一個組并通過 findAndUpdate 分配用戶并使用填充查詢它們,但我真的不明白如何在創建組之前將用戶 ObjectId 添加到陣列中。有人會給我建議如何為這種情況進行后期操作嗎?
這是我目前的后期操作,這當然不起作用。
import nc from 'next-connect';
import db from '../../../utils/db';
const handler = nc();
//create group
handler.post(async (req, res) => {
await db.connect();
const user = await User.findById(req.params.id);
const newGroup = new Group({
creator: req.user._id,
title: req.body.title,
members: [{
item: user,
}],
});
const group = await newGroup.save();
await db.disconnect();
res.send({ message: 'Group created', group });
});
export default handler;
謝謝你的協助!!
uj5u.com熱心網友回復:
您的模型看起來不錯,正如您定義的那樣
members: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
],
您可以將 objectIds 保存為陣列,并在查詢時分配 populate 方法,該方法將根據 objectId 自動填充用戶。
因此,為了保存組成員,請嘗試像這樣更新您的保存方法
handler.post(async (req, res) => {
await db.connect();
// you can remove this query
// const user = await User.findById(req.params.id);
const newGroup = new Group({
creator: req.user._id,
title: req.body.title,
// array of objectIds (user ids)
members: [req.params.id],
});
const group = await newGroup.save();
await db.disconnect();
res.send({ message: 'Group created', group });
});
并且為了獲取組成員,您可以在查詢組時添加 populate 方法
Group.find({}).populate('members') // the ref field name in Group model
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343594.html
上一篇:MongoDB(Mongoose)-僅獲取嵌套項等于值的記錄
下一篇:如何在模型中添加多個專案
