我可以用猫鼬在返回的文档中查询吗?

时间:2018-12-11 23:34:55

标签: javascript node.js mongodb mongoose mongoose-schema

我有一个这样的架构...

var TerritorySchema = new Schema({
    user: Schema.Types.ObjectId,
    streets: [streets_schema]
)};

var StreetsSchema = new Schema({
    name: String,
    odd: [block_schema],
    even: [block_schema],
    tags: [String]
)};

需要能够通过用户ID查找地区。但是,然后我需要在返回的文档内的街道中按名称查找街道。这就是我的做法...

TerritoryModel.findOne({user: userId})
    .then(territory => {
        // now i have my territory parent object
        // and must find street by name
        var streetINeedToFind = null;
        for(i = 0; i < territory.streets.length; i++){
            var street = territory.streets[i];
            if(street.name === streetNameToFind){
                streetINeedToFind = street;
                break;
            }
         }
    })
    // catch blah blah blah ... you know

我是NoSQL领域的新手,我只是觉得我应该能够查询所需的街道,并让数据库为我进行所有搜索。

领土模式实际上比我上面定义的要大得多,我将需要查询嵌套更深的子文档(例如,街道内的房屋等)。有没有一种方法可以在文档中进行查询,或者通过其他更简单的方法来发现子文档,而不是遍历它们?

我阅读了汇总信息,但是不确定这是否是我所需要的吗?我可能错了,也许我正在做的是最佳实践,有人可以给我指路吗?

1 个答案:

答案 0 :(得分:0)

如果您已经查询了完整文档,则可以直接使用标准的JS数组方法,例如find

var streetINeedToFind = territory.streets.find(s => s.name === streetNameToFind);

但是,如果只需要文档的特定部分,则可以使用this other question中的查询投影技术来实现。