从多层嵌套模型中获取数组

时间:2020-04-11 00:51:55

标签: arrays mongodb mongoose nested find

我在猫鼬中定义了以下架构。

const location4Schema = new mongoose.Schema({
    title: {
        type: String,
        unique: true
    }
});

const location3Schema = new mongoose.Schema({
    title: {
        type: String,
        unique: true
    },
    locations4: [location4Schema]
});

const location2Schema = new mongoose.Schema({
    title: {
        type: String,
        unique: true
    },
    locations3: [location3Schema]
});

const location1Schema = new mongoose.Schema({
    title: {
        type: String,
        unique: true
    },
    locations2: [location2Schema]
});

现在,我想使用特定位置3的 _id 查找位置4的数组。 我想要的结果是

[
{"_id": ObjectId("213213"), "title":"location4_title"},
{"_id": ObjectId("213213"), "title":"location4_title"},
...
]

目前我使用这种方式(同时使用location2 id和location3 id):

db.location1Schema.aggregate([ 
    {"$unwind" : "$locations2"}, 
    {$match: {"locations2._id": ObjectId("2131231")}}, 
    {"$unwind" : "$locations2.locations3"}, 
    {$match: {"locations2.locations3._id": ObjectId("21312321")}},     

    {$project: 
        {
            "locations2.locations3.locations4._id":1,
            "locations2.locations3.locations4.title":1, _id:0
        }
    }
])

**The result is:**
"locations2" : {
    "locations3" : {
        "locations4" : [
            {
                "_id" : ObjectId("213213"),
                "title" : "some_title"
            },
            {
                "_id" : ObjectId("2311"),
                "title" : "some_title"
            }
        ]
    }
}

这是我的问题:

  1. 是否有比我现在使用的方法更好(更快或更清洁)的方法? 哪有
  2. 我是否需要所有ID才能找到我的数组(location2和 location3)还是只能使用location3 id来做到?
  3. 如果我什至有 更深层的嵌套是执行查询的最佳方法是什么?
  4. 我的结果也不是最好的,因为它没有返回我想要的数组。所以我必须在后端修复它。

0 个答案:

没有答案