簡體   English   中英

如何在 mongodb 中獲取和顯示引用的數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM