#mongodb #mongoose #mongodb-query
#mongodb #мангуст #mongodb-запрос
Вопрос:
Здравствуйте и извините за заголовок, это довольно сложно объяснить словами.
У меня есть данные с кратным уровнем :
-strategyParameters -> [wsent -> [ {confirmationCandle.timestamp} ] ]
Я пытаюсь запросить документы, имеющие внутри wSent, внутри strategyParameters временную метку confirmationCandle, превышающую определенное значение. Я попробовал несколько попыток с некоторыми вещами, похожими на это :
db.getCollection('users').find({"exchange":"binance","pair":"LTCUSDT","timeframe":"1h","wSent.confirmationCandle.timestamp":{"$gt":1606644800000}})
Но это не увенчалось успехом, любая помощь будет высоко оценена.
ниже приведен конкретный пример документа внутри моей базы данных:
{
"_id" : ObjectId("5fd7b0f1356b89312949963a"),
"email" : "test@test.com",
"password" : "$2b$10$egeg",
"strategyParameters" : [
{
"_id" : ObjectId("5fd7c9940d0f3033fc527547"),
"pair" : "LTCUSDT",
"strategy" : "w",
"timeframe" : "1h",
"exchange" : "binance",
"wSent" : [
{
"_id" : ObjectId("5fd7adb9d157b430a05a87b1"),
"firstBottom" : {
"open" : 79.46,
"high" : 80.07,
"low" : 78.29,
"close" : 78.91,
"timestamp" : 1606690800000.0,
"isTop" : false,
"isBottom" : true
},
"top" : {
"open" : 78.89,
"high" : 80.5,
"low" : 78.87,
"close" : 79.7,
"timestamp" : 1606694400000.0,
"isTop" : true,
"isBottom" : false
},
"seconBottom" : {
"open" : 79.73,
"high" : 79.84,
"low" : 78.55,
"close" : 79.29,
"timestamp" : 1606698000000.0,
"isTop" : false,
"isBottom" : true
},
"confirmationCandle" : {
"open" : 81.56,
"high" : 85,
"low" : 81.1,
"close" : 83.24,
"timestamp" : 1606744800000.0, <-- the target
"isTop" : false,
"isBottom" : false
},
"exchange" : "binance",
"pair" : "LTCUSDT",
"timeframe" : "1h"
}
]
}
]
}
Ответ №1:
Ваш запрос не соответствует, потому что поля, которые вы ищете, не соответствуют структуре документа. В образце документа нет exchange
полей , pair
, timeframe
или wSent.confirmationCandle.timestamp
. Но у него есть strategyParameters.wSent.exchange
, strategyParameters.wSent.pair
, strategyParameters.wSent.timeframe
и strategyParameters.wSent.confirmationCandle.timestamp
поля.
Ваш запрос должен выглядеть примерно так:
db.getCollection("users").find({
"strategyParameters.wSent.exchange": "binance",
"strategyParameters.wSent.pair": "LTCUSDT",
"strategyParameters.wSent.timeframe": "1h",
"strategyParameters.wSent.confirmationCandle.timestamp": { $gt :1606644800000 }
})