What Structure For Create Tree Category And Set In Posts Is Better? And Find Posts By Selected Category In Mern
Solution 1:
I see that you're using $all operator.
The $all operator selects the documents where the value of a field is an array that contains all the specified elements. To specify an $all expression, use the following prototype: { : { $all: [ , ... ] } }
In your case, you're looking for an object "req.params.category" that has this value:
{"0":"1","1":"101","2":"1001"}
Try this:
// data declaringconst { category } = req.params// destructuring const posts = await Post.find({ category: category }).sort({ date: -1 });
// It's the sameconst posts = await Post.find({ category:
{
"0": "1",
"1": "101",
"2": "1001"
}
}).sort({ date: -1 })
Also, if finally posts equals to cursor , use .next() to converto to the final result.
posts.next()
I hope it works for you. Greetings.
Solution 2:
I think this structure is not logical so I change my post body to:
{"_id":"5ea00ded0e94961c0445bd5f","category":[{"cat_id":2,"cat_name":"2"},{"cat_id":102,"cat_name":"102"}],"user":"5deeaeeb06f015576080a435","title":"test5","description":"description5","date":"2020-04-22T09:27:09.692Z","__v":0}
and my schema is:
constPostSchema=newmongoose.Schema({user: {
type:mongoose.Schema.Types.ObjectId,
ref:'user'
},title: {
type:String,
required:true
},description: {
type:String,
required:true
},category: [
{
cat_id:Number,
cat_name:String
}
],options: {},phone: {
type:String,
},country: {
type:String,
},city: {
type:String,
},date: {
type:Date,
default:Date.now
}
});
but the problem it's i can`t find on my category array with this code:
router.get('/category/:category', async (req, res) => {
try {
const posts = await Post.find({category: {cat_name: req.params.category}})
if (!posts) {
return res.status(404).json({ msg: 'Ads not found' });
}
console.log(posts)
res.json(posts);
} catch (err) {
console.error(err.message);
if (err.kind === 'ObjectId') {
return res.status(404).json({ msg: 'Ads not found' });
}
res.status(500).send('Server Error!');
}
});
this return empty array [], I don't know why!
when I get all posts in console log my result is:
{
category: [ [Object], [Object] ],
_id: 5ea00ded0e94961c0445bd5f,
user: 5deeaeeb06f015576080a435,
title: 'test5',
description: 'description5',
date: 2020-04-22T09:27:09.692Z,
__v: 0
}
Solution 3:
The problem was solved this way: link
But I'm still happy to share your experiences about content categorization
so my final get posts by category is:
router.get('/category/:category', async (req, res) => {
try {
const posts = awaitPost.find({category: {$elemMatch: {cat_name: 'req.params.category'}}})
if (!posts) {
return res.status(404).json({ msg: 'Ads not found' });
}
console.log(posts)
res.json(posts);
} catch (err) {
console.error(err.message);
if (err.kind === 'ObjectId') {
return res.status(404).json({ msg: 'Ads not found' });
}
res.status(500).send('Server Error!');
}
});
Post a Comment for "What Structure For Create Tree Category And Set In Posts Is Better? And Find Posts By Selected Category In Mern"