MongoDB中嵌套文档的查询问题
我想获取价格和日期信息并将两个特定日期和名称之间的信息发送到 ejs。
我的第一个文档是这样的,我有很多。例如,我想要 2022 年 4 月 1 日到 2022 年 4 月 6 日之间的所有比特币信息。没有嵌套它可以工作,但在这种情况下我不能这样做。
{
"_id" : ObjectId("62175a6dd2b42d83134288f0"),
"result" : [
{
"name" : "Bitcoin",
"symbol" : "BTC",
"price" : 45488.969940933,
"date" : "2022-4-1",
"time" : "16:25:22",
"active" : 1
},
{
"name" : "Ethereum",
"symbol" : "ETH",
"price" : 3328.61487109438,
"date" : "2022-4-1",
"time" : "16:25:22",
"active" : 1
},
//..and goes to 100
]
}
我已经尝试过,
dbo.collection("info").find({ result : {name:"Bitcoin"}, date: { $gte: "2022-4-1", $lte: "2022-4-6" }.toArray //Getting an empty []
dbo.collection("info").find({ 'result.name' :"Bitcoin"}).toArray //Getting all of documents in the DB.
dbo.collection("info").find({"result": { $elemMatch:{"name": "Bitcoin"}}}).toArray //Same as above.
我也尝试过不使用 .toArray 和 findOne,但没有任何改变。非常感谢。
第一个对象的完整 JSON 为 https://pastebin.com/06V4upPY
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
mongoplayground
mongoplayground
正常的是,第二和第三查询返回所有文档,因为如果所有文档在结果数组中都有比特币元素,则它将返回文档。
source $ elemmatch(query)doc
仅用于过滤器比特币元素您必须在投影部分中$ elemmatch
这样:
mongoplayground
It's normal that the second and third query return all documents because if all documents have a Bitcoin element in the result array it will return the document.
Source $elemMatch (query) doc
For filter only the bitcoin element you must $elemMatch in the projection part
Like this :
MongoPlayground
Source : $elemMatch (projection) doc