#mongodb #mongodb-query
Вопрос:
Сценарий: я пытаюсь вычесть две даты в MongoDB и вернуть время, необходимое для обработки события, по любому идентификатору, который я предоставлю. Я смог получить следующие результаты (код#1) из поиска mongo с помощью запроса#1
запрос № 1 возвращает все значения в базе данных, которые я хочу получить только для двух идентификаторов
я пытаюсь сохранить приведенное ниже В запросе(запрос № 2) в запросе № 1 или в чем-либо соответствующем, но не повезло, любая помощь была бы действительно полезной
Код № 1:
/* 1 */
{
"_id" : "123",
"receivedTime" : ISODate("2021-08-10T17:56:56.305Z"),
"deliveryTime" : ISODate("2021-08-10T17:56:59.941Z"),
"processedTime" : 3.636
}
/* 2 */
{
"_id" : "234",
"receivedTime" : ISODate("2021-08-10T17:57:00.223Z"),
"deliveryTime" : ISODate("2021-08-10T17:57:00.691Z"),
"processedTime" : 0.468
}
/* 3 */
{
"_id" : "345",
"receivedTime" : ISODate("2021-08-10T17:57:19.812Z"),
"deliveryTime" : ISODate("2021-08-10T17:57:20.331Z"),
"processedTime" : 0.519
}
запрос № 1:
db.mycollection.aggregate([
{
"$project": {
"receivedTime": 1,
"deliveryTime": 1,
"processedTime": {
"$divide": [
{
"$subtract": [
"$deliveryTime",
"$receivedTime"
]
},
1000 //1000 for sec, 60000 for minute, 3600000 for hour
]
}
}
}
])
запрос № 2:
db.mycollection.find({
"_id": {
$in: [
"123",
"234"
]
}
}
)
Ответ №1:
Добавьте $match
этап в качестве первого этапа для фильтрации документов по _id
. Затем перейдите к $project
этапу возврата нужного формата документов.
db.mycollection.aggregate([
{
$match: {
"_id": {
$in: [
"123",
"234"
]
}
}
},
{
"$project": {
"receivedTime": 1,
"deliveryTime": 1,
"processedTime": {
"$divide": [
{
"$subtract": [
"$deliveryTime",
"$receivedTime"
]
},
1000//1000 for sec, 60000 for minute, 3600000 for hour
]
}
}
}
])
Комментарии:
1. спасибо, что сработало!
2. Привет @Mallikarjun, добро пожаловать. Можете ли вы принять этот ответ, поскольку он помогает? Спасибо.