首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用mongoose/mongoDB查询嵌套文档

用mongoose/mongoDB查询嵌套文档
EN

Stack Overflow用户
提问于 2015-01-20 21:17:46
回答 1查看 72关注 0票数 0

我有一个汽车模型,如下所示

代码语言:javascript
运行
复制
{
    "_id": "54b8a71843286774060b8bed",
    "name": "Car1",
    "active": true,
    "model": [
        {
            "name": "Model1",
            "active": true,
            "_id": "54b8a71843286774060b8bee",
            "available": [
                {
                    "Day": "Mon",
                    "quantity": "6"
                },
                {
                    "Day": "Tue",
                    "quantity": "6"
                },
                {
                    "Day": "Wed",
                    "quantity": "6"
                },
                {
                    "Day": "Thurs",
                    "quantity": "6"
                },
                {
                    "Day": "Fri",
                    "quantity": "0"
                }
            ]
        },
        {
            "name": "Model2",
            "active": true,
            "_id": "54b8a71843286774060b8bef",
            "available": [
                {
                    "Day": "Mon",
                    "quantity": "6"
                },
                {
                    "Day": "Tue",
                    "quantity": "6"
                },
                {
                    "Day": "Wed",
                    "quantity": "6"
                },
                {
                    "Day": "Thurs",
                    "quantity": "6"
                },
                {
                    "Day": "Fri",
                    "quantity": "6"
                }
            ]
        },
        {
            "name": "Model3",
            "active": true,
            "_id": "54b8a71843286774060b8beg",
            "available": [
                {
                    "Day": "Mon",
                    "quantity": "6"
                },
                {
                    "Day": "Tue",
                    "quantity": "6"
                },
                {
                    "Day": "Wed",
                    "quantity": "6"
                },
                {
                    "Day": "Thurs",
                    "quantity": "6"
                },
                {
                    "Day": "Fri",
                    "quantity": "0"
                }
            ]
        }
    ]
}

我正在尝试搜索汽车在给定日期的可用性。例如,如果我选择星期五,那么它应该在星期五返回数量超过0的汽车,但目前它也返回数量为0的所有汽车。

我已经写了如下的问题

Car.find({ 'active':真,'model.available':{ $elemMatch:{$gte : 1 } )

但它也会返回数量为0的文档。

EN

回答 1

Stack Overflow用户

发布于 2015-01-20 22:34:18

为此,您需要aggregation pipeline

下面的代码片段实现了这一点:

  1. 查找至少具有一个匹配模型的所有文档。
  2. 拆分文档:其中包含3个模型数组的文档将转换为三个文档,每个文档具有一个模型:

{name: "Car1": 1, models: [{name: "Model1"}, {name: "Model2"}, {name: "Model3"}]}

变成:

对拆分的文档(再次)按数量进行筛选,然后day.

  • Optionally,将文档重新粘合在一起。{name: "Car1", models: {name: "Model1"}} & {name: "Car1", models: {name: "Model2"}} &{name: "Car1", models: {name: "Model2"}}拆分文档。你可能不需要在你的application.

中使用它

代码语言:javascript
运行
复制
db.cars.aggregate([
    // First, we do your query, which will return 
    // every document that has _at least one_
    // model that is available.
    {$match: {
        'active': true,
        'model.available': {$elemMatch: { 
            'quantity': {$gte: 1},
            'Day': 'Fri'
        }}
    }},
    // We split up the found documents,
    // every document will now have exactly
    // one 'model' in it.
    {$unwind: "$model"},
    // We now filter the split documents.
    {$match: {
        'model.available': {$elemMatch: { 
            'quantity': {$gte: 1},
            'Day': 'Fri'
        }}
    }},
    // If you want, you can now glue the
    // models back together again.
    {$group: {
        _id:    "$_id", // Group all documents with the same _id
        name:   {$first: "$name"},
        active: {$first: "$active"},
        model:  {$push: "$model"}  // Make an array of models
    }}
])

重要提示:要使$gte正常工作,您需要将数量存储为数字,而不是字符串。由于您的示例将数字存储为字符串,因此您可能需要在数据库中仔细检查它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28046335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档