mongoDB分布式问题
这是我的JSON格式数据之一:mongoDB分布式问题,mongodb,mongoose,Mongodb,Mongoose,这是我的JSON格式数据之一: { "_id" : ObjectId("5bfdb412a80939b6ed682090"), "accounts" : [ { "_id" : ObjectId("5bf106eee639bd0df4bd8e05"), "accountType" : "DDA", "productName" : "DDA1" }, {
{
"_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" ] }
厉害!谢谢