猫鼬在嵌入式文档中获取特定项目

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 只有匹配查询的第一个子文档。