javascript - 尝试使用帖子信息填充用户文档,但我只有手动推送的用户 ID
问题描述
所以我试图获取帖子的标题,因为当我在用户仪表板上显示一系列帖子时,我只能在重定向它们时显示帖子的 ID,这有效......但我认为它会让用 TITLE 代替它更有意义。人口似乎没有将对象推入数组,也许我对人口的理解不正确,或者有更好的方法来解决它......谢谢。
这是该列表的反应代码
<ol>
{ user ? user.posts.map((item,i) => (
<React.Fragment key ={i}>
<li><Link to={`/api/posts/item/${item}`}>{item}</Link></li>
<button onClick={() => { setId(item) }}>Delete this post</button>
</React.Fragment>
)) : null }
</ol>
这是给我用户 ID 和填充 f(n) 的后端代码
userModel.findOne({ email: req.body.author }, function(error, user) {
const locationURL = req.files.map((item) => item.location);
postModel.create({ ...req.body, image: locationURL }, (error, returnedDocuments) => {
if (error) {
throw new Error(error);
}
user.posts.push(returnedDocuments._id);
user.save((err) => {
console.log(err);
});
});
// this will populate the posts field in our userSchema (which contain the id references to our posts)
userModel.findOne({ email: req.body.author }).populate('posts').exec((err, user) => {
user.save((err) => {
console.log(err);
});
});
});
在用户文档中,它看起来像这样,一个 ID 数组
[
{
"premium": false,
"max_posts": 62,
"posts_made": 57,
"posts": [
"5e21252ac51ac82838947875",
"5e212a6c3b1619294832a3f2"
],
"_id": "5e0fe3f33c2edb2f5824ddf2",
"email": "myemail@gmail.com",
"createdAt": "2020-01-04T01:01:39.840Z",
"updatedAt": "2020-01-17T03:36:36.086Z",
"__v": 22
}
]
在我的 userSchema 中,我引用了帖子...但也许我做错了,并且以某种方式可以访问该信息...
let User = new Schema(
{
email: {
type: String,
unique: true
},
premium: {
type: Boolean,
default:false
},
max_posts: {
type: Number,
default:3
},
posts_made: {
type: Number,
default:0
},
posts: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}
]
},
{
timestamps: true
}
);
我是否应该调用 axios 请求来获取我拥有的那些 ID 的名称,我有这个想法,但认为这可能是对数据库的不必要调用,这可能会变得昂贵。谢谢。
解决方案
实际上,您正在正确填充,但不在正确的位置。您应该在回调中移动填充代码,并像这样发送结果。
postModel.create({ ...req.body, image: locationURL }, (error, returnedDocuments) => {
if (error) {
throw new Error(error);
}
user.posts.push(returnedDocuments._id);
user.save((err) => {
if (err) {
console.log(err);
throw new Error(err);
}
userModel.findOne({ email: req.body.author }).populate('posts').exec((err, user) => {
if (err) {
console.log(err);
throw new Error(err);
}
res.send(user); //user will have posts populated
});
});
});
推荐阅读
- react-native - 如何使用 React Native 将具有自动大小的图像放入列中?
- java - 如何从现有的 java.util.Date 对象中单独获取时间和日期部分
- django - 如果相同的字符串存储在其中,如何更改 slug?
- ios - 在 webView(_:decidePolicyFor:decisionHandler:) 中读取 HTML 元素
- java - “E/AndroidRuntime: FATAL EXCEPTION: main”在我尝试创建 SipFactory 实例时引起
- javascript - 将数组过滤到产品签入记录中的事件
- reactjs - 将所有 console.log 输出保存到本机反应的文件中
- python - 如何使用 python 评估 PMML 文件
- php - Laravel 5.8 withCount() 忽略了我的 where 语句
- mariadb - MariaDB 集群只同步空数据库和表,但不同步行