簡體   English   中英

Mongodb 中的表引用

[英]Table Refrence In Mongodb

我有兩個模型 1: UserSchema & 2:todo

**

const userSchema = new mongoose.Schema{ name: String, email: String, todo: { desc} }

**

**

const todoSchema = new mongoose.Schema{ id: id, desc: String }

**

所以我的查詢是我想從基於用戶標識的“待辦事項”集合中獲取基於標識的用戶待辦事項。

我的最終結果將是:

**

{ _id: new ObjectId("63a73aded28fd96ab66a9f30"), name: 'world', email: 'world@gmail.com', todo: [], __v: 0,

}

**

如何使用mongodb獲取todo數據

MongoDB 或一般的文檔數據庫與關系數據庫(如 MySQL、PostgreSQL 等)不同,因為 MongoDB 不像關系數據庫那樣原生支持關系。 然而,mongoose(node.js 中 MongoDB 的 ODM)及其模型有一種使用模型引用來表示關系的方法。 因此,您的模型將是:

const userSchema = new mongoose.Schema{ name: String, email: String, todo: { type: Schema.Types.ObjectId, ref: 'Todo' } }
const todoSchema = new mongoose.Schema{ desc : String }
const User = mongoose.model('User', userSchema);
const Todo = mongoose.model('Todo', todoSchema);

為了獲取用戶並populate他們的todo ,您可以在 mongoose 中執行以下查詢

const user = await User.findById(id).populate('todo')

我還建議您瀏覽有關填充函數的 mongoose 文檔的此頁面https://mongoosejs.com/docs/populate.html

要在沒有貓鼬的情況下直接在 MongoDB 上進行查詢,您可以使用聚合進行以下查詢。

db.users.aggregate([
{
    "$match": {
        "_id": 1
    }
},
{
    "$lookup": {
        "from": "todos",
        "localField": "todo",
        "foreignField": "_id",
        "as": "todo"
    }
}

])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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