猫鼬在嵌入式文档中获取特定项目
Mongoose getting specific item in Embedded Document
我是 NoSQL 的新手,有点卡住了。你能帮帮我吗?
有没有办法获取数组中的特定字段(如果它与某个值匹配)?
例如,我想获取数组 accountGroup 中的特定项目,其中 accountGroupName=="Account 1".
我尝试了很多代码,但它只是 returns 具有与值匹配的项目的整个数组。
顺便说一下,我正在使用 Mongoose 和 Nodejs。谢谢
//here is the database
{
"_id" : ObjectId("60d2db4b90c66c3b0832a616"),
"accountType" : "Account Type 1",
"accountGroup" : [
{
"_id" : ObjectId("60d2db5a90c66c3b0832a619"),
"accountGroupName" : "Account 1",
"rangeFrom" : 25,
"rangeTo" : 35
},
{
"_id" : ObjectId("60d3fbfbc1502c3ed8cadf86"),
"accountGroupName" : "Account2",
"rangeFrom" : 850,
"rangeTo" : 2000
},
{
"_id" : ObjectId("60d2ddb1396dbf384898fbad"),
"accountGroupName" : "account 1 sample 3",
"rangeFrom" : 10,
"rangeTo" : 15
}
],
}
{
"_id" : ObjectId("60d2db4e90c66c3b0832a617"),
"accountType" : "Account Type 2",
"accountGroup" : [
{
"_id" : ObjectId("60d2e9586c4fa82310349c7c"),
"accountGroupName" : "account 2 sample 5",
"rangeFrom" : 50,
"rangeTo" : 60
}
]
}
您可以像这样使用 position operator $
进行投影:
YourModel.find({
"accountGroup.accountGroupName": "Account 1"
},
{
"accountGroup.$": 1
})
示例here
请注意,您将获得整个文档,因为使用
YourModel.find({"accountGroup.accountGroupName": "Account 1"})
你告诉 mongo“给我一个文档,其中 accountGroup
数组中的值 accountGroupName
等于 Account 1
。匹配该条件的文档包含整个数组。
所以使用位置运算符,根据其描述是你需要的:
The positional $ operator limits the contents of an to return the first element that matches the query condition on the array.
这就是为什么使用一个查询可以得到整个文档,而使用另一个查询可以得到所需的值。
另请注意 $
return 只有匹配查询的第一个子文档。
我是 NoSQL 的新手,有点卡住了。你能帮帮我吗?
有没有办法获取数组中的特定字段(如果它与某个值匹配)? 例如,我想获取数组 accountGroup 中的特定项目,其中 accountGroupName=="Account 1".
我尝试了很多代码,但它只是 returns 具有与值匹配的项目的整个数组。
顺便说一下,我正在使用 Mongoose 和 Nodejs。谢谢
//here is the database
{
"_id" : ObjectId("60d2db4b90c66c3b0832a616"),
"accountType" : "Account Type 1",
"accountGroup" : [
{
"_id" : ObjectId("60d2db5a90c66c3b0832a619"),
"accountGroupName" : "Account 1",
"rangeFrom" : 25,
"rangeTo" : 35
},
{
"_id" : ObjectId("60d3fbfbc1502c3ed8cadf86"),
"accountGroupName" : "Account2",
"rangeFrom" : 850,
"rangeTo" : 2000
},
{
"_id" : ObjectId("60d2ddb1396dbf384898fbad"),
"accountGroupName" : "account 1 sample 3",
"rangeFrom" : 10,
"rangeTo" : 15
}
],
}
{
"_id" : ObjectId("60d2db4e90c66c3b0832a617"),
"accountType" : "Account Type 2",
"accountGroup" : [
{
"_id" : ObjectId("60d2e9586c4fa82310349c7c"),
"accountGroupName" : "account 2 sample 5",
"rangeFrom" : 50,
"rangeTo" : 60
}
]
}
您可以像这样使用 position operator $
进行投影:
YourModel.find({
"accountGroup.accountGroupName": "Account 1"
},
{
"accountGroup.$": 1
})
示例here
请注意,您将获得整个文档,因为使用
YourModel.find({"accountGroup.accountGroupName": "Account 1"})
你告诉 mongo“给我一个文档,其中 accountGroup
数组中的值 accountGroupName
等于 Account 1
。匹配该条件的文档包含整个数组。
所以使用位置运算符,根据其描述是你需要的:
The positional $ operator limits the contents of an to return the first element that matches the query condition on the array.
这就是为什么使用一个查询可以得到整个文档,而使用另一个查询可以得到所需的值。
另请注意 $
return 只有匹配查询的第一个子文档。