我想得到价格和日期的信息,并发送到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
发布于 2022-04-12 09:23:51
db.collection.find({
result: {
$elemMatch: {
name: "Bitcoin",
date: {
$gte: "2022-4-1",
$lte: "2022-4-6"
}
}
}
},
{
"result.$": 1
})发布于 2022-04-12 09:26:34
第二个和第三个查询返回所有文档是正常的,因为如果所有文档在结果数组中都有一个比特币元素,那么它将返回文档。
$elemMatch运算符将包含数组字段的文档与至少一个匹配所有指定查询条件的元素匹配。
为了只过滤比特币元素,您必须在投影部分中使用$elemMatch,如下所示:
dbo.collection("info").find({
'result.name' :"Bitcoin"
},
{
'result': {
$elemMatch: {
"name": "Bitcoin"
}
}
)$elemMatch运算符限制查询结果中字段的内容。
https://stackoverflow.com/questions/71839895
复制相似问题