簡體   English   中英

貓鼬子文檔引用另一個子文檔

[英]Mongoose sub doc referencing another sub doc

我有一個帶有兩個子文檔集的customer模式; orderschildren ,如下所示:

 const mongoose = require('mongoose'); const Schema = mongoose.Schema; const ObjectId = Schema.ObjectId; const childrenSchema = new Schema({ 'firstname': { 'type': String, 'required': true }, 'lastname': { 'type': String, 'required': true }, 'class': { 'type': String, 'required': true }, 'school': { 'type': ObjectId, 'ref': 'Schools', 'required': true } }); mongoose.model('Children', childrenSchema); const ordersSchema = new Schema({ 'date': { 'type': Date, 'required': true }, 'delivery': { 'type': Date, 'required': true }, 'item': { 'type': ObjectId, 'ref': 'Foods', 'required': true }, 'child': { 'type': ObjectId, 'ref': 'Children', 'required': true } }); mongoose.model('Orders', ordersSchema); const customersSchema = new Schema({ 'contact': { 'firstname': { 'type': String, 'required': true }, 'lastname': { 'type': String, 'required': true }, 'address': { 'road': { 'type': String, 'required': true }, 'number': { 'type': String, 'required': true }, 'floor': String, 'door': String, 'city': { 'type': String, 'required': true }, 'zipcode': { 'type': String, 'required': true } }, 'email': { 'type': String, 'index': { 'unique': true }, 'required': true }, 'phone': String }, 'password': { 'type': String, 'required': true }, 'balance': { 'type': Number, 'default': 0.00 }, 'active': { 'type': Boolean, 'default': false }, 'children': [childrenSchema], 'orders': [ordersSchema] }); mongoose.model('Customers', customersSchema); 

現在,我的問題是,當我執行簡單的查找並填充時,Customers.orders.child無法正確填充:

Customers.find()
    .select('-password')
    .populate('orders.item orders.child orders.child.school children.school')
    .exec((err, result) => {
        if (err) return console.log(err);
        console.log(result);
    });

樣本結果:

{
    "_id": "59cbb8335b5cdb08f85879b7",
    "__v": 1,
    "orders": [
        {
            "date": "2011-10-05T14:48:00.000Z",
            "delivery": "2011-10-05T14:48:00.000Z",
            "item": {
                "_id": "59cbd9c78142782c30285bde",
                "name": "Laksesandwich",
                "description": "Saftig frisk laks i en hjemmebagt speltbolle med salat og dressing.",
                "price": 38.5,
                "__v": 0,
                "image": "placeholder.png"
            },
            "child": null,
            "_id": "59cbfe9f36b937296cbc76be"
        }
    ],
    "children": [
        {
            "firstname": "Ole",
            "lastname": "Erling",
            "class": "8A",
            "school": {
                "_id": "59cb876d7c700ec255eeb04d",
                "name": "Københavns Skole",
                "address": {
                    "road": "Københavnsvej",
                    "number": "133",
                    "city": "København",
                    "zipcode": "2000"
                }
            },
            "_id": "59cbb8335b5cdb08f85879b8"
        }
    ],
    "active": false,
    "balance": 0,
    "contact": {
        "firstname": "Albert",
        "lastname": "Einstein",
        "email": "genius@gmail.com",
        "address": {
            "road": "Hovedgaden",
            "number": "42",
            "city": "København",
            "zipcode": "2000"
        }
    }
}

orders.child為null ,但應為已填充_id的子項的文檔。

我該如何處理?

嘗試這個:

Customers.find()
    .select('-password')
    .populate('orders.item children.school')
    .populate({
        path: 'orders.child',
        model: 'Children',
        populate: {
            path: 'orders.child.school',
            model: 'Schools'
        }
    })
    .exec((err, result) => {
        if (err) return console.log(err);
        console.log(result);
    });

您必須嵌套填充以獲取對文檔的嵌套引用。

暫無
暫無

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

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