我将MongoDB与NodeJS一起使用,并以此方式将数据保存在名为“ posts”的集合中
{
"_id": "5ca0ff61f247dc29b8331af9",
"tipo": "First Mongo Post",
"user": {
"_id": "5ca01d2c56a2d9165c848f4f",
"nombre": "User1",
"email": "luis@gmail.com",
"permission": "Administrador",
"__v": 0
},
"rates": [
{
"user": "5ca01d2c56a2d9165c848f4f",
"votation": 1
},
{
"user": "5ca021b03904f70cf823b6e6",
"votation": -1
}
],
"__v": 0
}
我想以这种方式正确保存数据,无论如何,我想从我的集合中获取称为“帖子”的所有信息,但是名为 rates 的数组只希望获得与调用get方法的用户相同的用户对象。
例如,如果我调用我的 get 方法,并发送了用户ID(5ca01d2c56a2d9165c848f4f),则我想返回所有帖子集,但要在Rates数组中在每个对象中,我只希望具有与我在 get 方法中发送的ID相比具有相同ID的对象,例如:
{
"_id": "5ca0ff61f247dc29b8331af9",
"tipo": "First Mongo Post",
"user": {
"_id": "5ca01d2c56a2d9165c848f4f",
"nombre": "User1",
"email": "luis@gmail.com",
"permission": "Administrador",
"__v": 0
},
"rates": [
{
"user": "5ca01d2c56a2d9165c848f4f",
"votation": 1
}
],
"__v": 0
}
说实话,我不知道该怎么做,所以希望您能为我提供帮助或向我解释我该怎么做。
关于,我是新使用此技术的人
答案 0 :(得分:0)
您可以分别存储Rate和Post对象,因此可以创建一个名为 rates 的新集合,以使Rates与Posts集合分开。在Rate集合中,您可以存储postId,userId和votation值
const mongoose = require('mongoose');
const RateSchema = new mongoose.Schema({
userId: {
type: String
},
postId: {
type: String
},
votation: {
type: Number,
}
);
module.exports = mongoose.model('Rate', RateSchema);
之后,您可以创建一个函数来获取与userId和postId相关的费率,例如
const Rate = require('../models/Rate');
function getRatesByUserIdandPostId(userId, postId) {
return Rate.find({userId, postId});
};
这样,您无需在for循环中搜索与该用户相关的费率,函数便会为您完成。另外,它的速度更快,因为您无法获得与某一特定帖子相关的所有费率。