[英]how do I get and display the referenced data in mongodb?
我創建了兩個模型用戶並在用戶引用帖子的地方發帖。 這是我的用戶模型。
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/demo",{ useNewUrlParser: true });
var Post = require('./post');
var UserSchema = mongoose.Schema({
username: String,
password: String,
posts:[{
type:mongoose.Schema.Types.ObjectId,
ref: Post
}] });
這是我的帖子模型
var postSchema = mongoose.Schema({
title:String,
content: String,
likes:Number
});
當我創建新帖子並將其保存給特定用戶時,我會在用戶模型的帖子字段中獲得一個 ID。 像這樣:-
{
posts: [
60e33a2d18afb82f8000d8f0,
],
_id: 60d9e931b5268920245c27f0,
username: 'user1',
password: '1234',
__v: 5
}
如何訪問和顯示帖子字段的內容?
謝謝!
您可以使用 Aggregate 在 MongoDB 中獲取和顯示參考數據。
像:
await User.aggregate([
{
$match: { _id: ObjectId(user._id)}
},
{
$lookup: { from: "Posts", localField: "post", foreignField: "_id", as: "posts" }
},
{
$unwind: { path: "$users", preserveNullAndEmptyArrays: true,}
}, {
$project: {
" Now you can select here whatever data you want to show "
}
}
])
PS:如果有什么不明白的請留言。
謝謝
Mongoose 有一個強大的替代方法來使用aggregate
。 您可以使用populate執行此操作。
像這樣使用它👇這將使用實際的帖子文檔填充posts
字段內的id。
User.findById(id).populate('posts')
// Full example
try {
const user = await User.findById(id).populate('posts').exec();
for (let post of user.posts) {
console.log(post.content);
}
} catch (ex) {
console.error(ex);
}
如果可以的話,關於如何設置文檔模型或只是向您展示替代方法的小建議。 不要引用用戶文檔中的帖子。 反過來做,並在您的發布文檔中引用用戶。
const postSchema = mongoose.Schema({
title : String,
content : String,
likes : Number,
user : { type:mongoose.Schema.Types.ObjectId, ref: 'User' }
});
// GET ALL POSTS FROM ONE USER
Post.find({user:id});
這樣,您在嘗試顯示 1 個用戶的所有帖子時就不需要使用 populate 了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.