MongoDB:查找具有用户 ID 的项目

时间:2020-12-22 05:43:17

标签: mongodb express mongoose

我有一个产品集合和一个用户集合,我在其中将用户引用到我的产品集合。

到目前为止,我在这里想要实现的是仅获取该用户创建的产品。

const getOwnerProduct = expressAsyncHandler(async (req, res) => {
    const activeUser = await User.findById(req.user._id)
    const pageSize = 10
    const page = Number(req.query.pageNumber) || 1

    const items = { user: { _id: activeUser } }

    const count = await Product.countDocuments({ ...items } )

    const products = await Product.find({ ...items }).limit(pageSize).skip(pageSize * (page - 1))
    res.json({ products, page, pages: Math.ceil(count / pageSize) })
})

这是产品架构:

const productSchema = mongoose.Schema({
    user: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'User'
    },
    name: {
        type: String,
        required: true
    },
    price: {
        type: Number,
        required: true,
    },
    description: {
        type: String,
        required: true
    },
    email: {
        type: String
    },
    rating: {
        type: Number,
        required: true,
        default: 0
    },
    image: {
        type: String,
        required: true,
        default: 0
    },

}, { timestamps: true
})

这里是 userSchema:

const userSchema = mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    phone: {
        type: String,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    },
    role: {
        type: String,
        enum: ['administrator', 'productOwner', 'regular'],
        default: 'regular'
     }
}, { timestamps: true
})

这是路由器:

app.use('/api/products', productRoutes)
router.route('/').get(getProducts, admin).get(getOwnerProducts, productOwner)

出于某种原因,这不起作用。我认为我在 mongodb 上的查询不正确。

知道我在这里遗漏了什么吗?

1 个答案:

答案 0 :(得分:0)

在这里,您可以尝试代替 const products = await Product.find({ ...items })

await User.findById(req.user._id).forEach(element =>{Product.find({user=element._id})}); 

await User.findById(req.user._id).forEach(element =>{Product.find(user=element._id)});