0

我是 NoSQL 的新手,我有点卡住了。你能帮助我吗?

如果它匹配一个值,有什么方法可以获取数组中的特定字段?例如,我想在 accountGroupName=="Account 1" 的数组 accountGroup 中获取特定项目。

我尝试了很多代码,但它只返回具有与该值匹配的项目的整个数组。

顺便说一句,我正在使用 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
            }
    ]
    }
4

1 回答 1

0

您可以像这样在投影中使用位置运算符:$

YourModel.find({
  "accountGroup.accountGroupName": "Account 1"
},
{
  "accountGroup.$": 1
})

这里的例子

请注意,您正在获取整个文档,因为使用

YourModel.find({"accountGroup.accountGroupName": "Account 1"})

你告诉 mongo “给我一个文档,其中数组中的值accountGroupName等于accountGroup.Account 1并且匹配该条件的文档包含整个数组。

因此,根据其描述,您需要使用位置运算符:

位置 $ 运算符限制 an 的内容以返回与数组上的查询条件匹配的第一个元素。

这就是为什么使用一个查询可以获得整个文档,而使用另一个查询可以获得所需的值。

另请注意$,仅返回与查询匹配的第一个子文档。

于 2021-06-24T10:34:53.320 回答