mongoDB分布式问题

mongoDB分布式问题,mongodb,mongoose,Mongodb,Mongoose,这是我的JSON格式数据之一: { "_id" : ObjectId("5bfdb412a80939b6ed682090"), "accounts" : [ { "_id" : ObjectId("5bf106eee639bd0df4bd8e05"), "accountType" : "DDA", "productName" : "DDA1" }, {

这是我的JSON格式数据之一:

{
    "_id" : ObjectId("5bfdb412a80939b6ed682090"),
    "accounts" : [ 
        {
            "_id" : ObjectId("5bf106eee639bd0df4bd8e05"),
            "accountType" : "DDA",
            "productName" : "DDA1"
        },
        {
            "_id" : ObjectId("5bf106eee639bd0df4bd8df8"),
            "accountType" : "VSA",
            "productName" : "VSA1"
        }, 
        {
            "_id" : ObjectId("5bf106eee639bd0df4bd8df9"),
            "accountType" : "VSA",
            "productName" : "VSA2"
        }
    ] 
}
我想进行查询以获取
accountType=VSA
的所有产品名称(无重复项)。 我编写了一个mongo查询:

db.Collection.distinct("accounts.productName", {"accounts.accountType": "VSA" })
我期望:
['VSA1','VSA2']

我得到:
['DDA','VSA1','VSA2']

有人知道为什么查询不能在distinct中工作吗?

方法的第二个参数表示:

指定要从中检索不同值的文档的查询

但问题是,您只显示了一个具有嵌套元素数组的文档,因此整个文档将针对您的条件返回
“accounts.accountType”:“VSA”

要解决此问题,必须在应用筛选之前使用聚合框架和嵌套数组,然后可以使用来获取唯一值。尝试:

db.col.aggregate([
    {
        $unwind: "$accounts"
    },
    {
        $match: {
            "accounts.accountType": "VSA"
        }
    },
    {
        $group: {
            _id: null,
            uniqueProductNames: { $addToSet: "$accounts.productName" }
        }
    }
])
其中打印:

{ "_id" : null, "uniqueProductNames" : [ "VSA2", "VSA1" ] }

厉害!谢谢