首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MongoDB中的数组字段中投影特定元素?

如何在MongoDB中的数组字段中投影特定元素?
EN

Stack Overflow用户
提问于 2019-04-10 08:53:33
回答 3查看 145关注 0票数 2

我在MongoDB中有这样的数据:

代码语言:javascript
复制
{
"_id" : ObjectId("5c7e459f875ea5548de25722"),
"Autos" : [
    {
        "_id" : ObjectId("5cad9759e1c3895999adaceb"),
        "deleted" : 1,

    },
    {
        "_id" : ObjectId("5cad9a8be1c3895999adacef"),
        "deleted" : 0,

    },
    {
        "_id" : ObjectId("5cad9aa4e1c3895999adacf0"),
        "deleted" : 0,
    }
]
    }

{
"_id" : ObjectId("5c7e45e9875ea5548de25724"),
"Shoemaking" : [
    {
        "_id" : ObjectId("5cad9770e1c3895999adacec"),
        "deleted" : 1,
    },
    {
        "_id" : ObjectId("5cad9a5de1c3895999adaced"),
        "deleted" : 0,
    },
]

我想基本上是select * from table where deleted = 0

显示已删除的记录等于0的位置。

以下是我到目前为止尝试过的:

代码语言:javascript
复制
db.rental.find({"Autos.deleted":{$ne: 1}}).pretty()

db.rental.find({"Autos":  {$elemMatch: {deleted: 1 } } } ).pretty()

db.rental.find({"Autos.deleted": 0},{"Autos": {$elemMatch: 
{deleted:0}}});

但以上这些对我都不起作用。我做错了什么?

期望产出:

代码语言:javascript
复制
{
    "_id" : ObjectId("5c7e459f875ea5548de25722"),
    "Autos" : [
        {
            "_id" : ObjectId("5cad9a8be1c3895999adacef"),
            "deleted" : 0,

        },
        {
            "_id" : ObjectId("5cad9aa4e1c3895999adacf0"),
            "deleted" : 0,
        }
    ]
        }

        {
          "_id" : ObjectId("5c7e45e9875ea5548de25724"),
          "Shoemaking" : [
              {
                  "_id" : ObjectId("5cad9a5de1c3895999adaced"),
                  "deleted" : 0,
              },
          ]
}

我希望输出类似于上面的内容,但是到目前为止,我尝试过的所有查询要么只选择数组的一个记录,要么什么也不选择。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-10 09:39:01

代码语言:javascript
复制
db.rental.aggregate([
   {
      $project: {
         Autos: {
            $filter: {
               input: "$Autos",
               as: "auto",
               cond: { $eq:["$$auto.deleted",0] }
            }
         }
      }
   }
])
票数 1
EN

Stack Overflow用户

发布于 2019-04-10 09:05:24

代码语言:javascript
复制
db.rental.find({ "Autos.deleted": { $eq: 0 } } )
票数 0
EN

Stack Overflow用户

发布于 2019-04-10 09:14:49

使用$elemMatch匹配包含在数组中的内容。mongodb-$elemMatch

代码语言:javascript
复制
db.rental.find({
      Autos: {
        $elemMatch: {
          deleted: 0
        }
      }
    })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55608467

复制
相关文章

相似问题

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