У меня есть данные mongodb JSON, и я хочу найти слово для точного соответствия «Утверждено» - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть данные Mongodb, и я хочу найти слово точного соответствия "Approved" в массиве с именем "Sales.Action".

Но массив содержит и другие значения, отличные от значения "Approve", которое также возвращаю, когда я запрашиваю.

Я хочу, чтобы возвращалось только одно действие.

{
"Sales" : [
    {
        "Action" : [
            "Approved"
        ],
        "Log" : [
            "Created on: 04/20/2020 42:04:04"
        ]
    },
    {
        "Action" : [
            "Approve",
            "Decline",
            "Edit",
            "Remarks"
        ],
        "Log" : [
            "Created on: 04/20/2020 42:04:04"
        ]
    },
    {
        "Action" : [
            "Approve",
            "Decline",
            "Edit",
            "Remarks"
        ],
        "Log" : [
            "Created on: 04/21/2020 412:04:04"
        ]
    },
    {
        "Action" : [
            "Approve",
            "Decline",
            "Edit",
            "Remarks"
        ],
        "Log" : [
            "Created on: 04/21/2020 412:04:04"
        ]
    },
    {
        "Action" : [
            "Approve",
            "Decline",
            "Edit",
            "Remarks"
        ],
        "Log" : [
            "Created on: 04/23/2020 44:04:04"
        ]
    }
]

}

Но мне нужно вернуть только 1 значение, которое утверждено.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Попробуйте это:

Найти (Обход)

Позиционный оператор $ ограничивает содержимое из результатов запроса, чтобы оно содержало только first элемент, соответствующий документу запроса.

https://docs.mongodb.com/manual/reference/operator/projection/positional/#proj. S

db.collection.find({ "Sales.Action": "Approved" }, { "Sales.Action.$": 1 })

MongoPlayground

Агрегация

db.collection.aggregate({
  $addFields: {
    Sales: {
      $filter: {
        input: "$Sales",
        cond: {
          $in: [
            "Approved",
            "$$this.Action"
          ]
        }
      }
    }
  }
})

MongoPlayground

0 голосов
/ 25 апреля 2020

Вы можете использовать оператор filter. Я считал, что имя коллекции - sales.

db.sales.aggregate({
    $project: {
    Sales: {
        $filter: {
            input:'$Sales', as: 'sales', cond: {$eq: ['$$sales.Action', ['Approved']]}}
        }
    }
}).pretty()

. Вывод выше был:

{
    "_id" : ObjectId("5ea47a863873d6e16c0f7aac"),
    "Sales" : [
        {
            "Action" : [
                "Approved"
            ],
            "Log" : [
                "Created on: 04/20/2020 42:04:04"
            ]
        }
    ]
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...