mongo用户的小脑筋急转弯。
我有一些文件,如
{
"_id" : ObjectId("19628f4f0545a733185b672f"),
"name" : "hello",
"items" : [
{
"itemNumber" : 12512,
"value" : "let"
},
{
"itemNumber" : 2546,
"value" : "put"
}
]
}
我需要确保每个项目itemNumber
在整个系列中都是唯一的。
在SQL数据库中,我会有一个单独的项目表和检查数字是否唯一的查询将类似
select count(1)
from (
select itemNumber, count(itemNumber) as cnt
from items
group by itemNumber) sel
where cnt>1;
结果0
意味着所有itemNumber
都是唯一的。 (可能有更好的方法在SQL中进行检查)
使用MongoDB,我能找到的唯一解决方案是
a)使用forEach
将所有项目提取到单独的集合
b)进行简单的聚合
db.items.aggregate(
{ $group : { _id : '$itemNumber', count : {$sum : 1} } },
{ $out : "cnt" }
)
c)db.cnt.find({count: {$gt: 1}}).count()
有任何一种查询方式吗?
表现通知:该集合约为3M文件,每份2,2KB。我注意到包含$group
的聚合在此集合中永远运行。
答案 0 :(得分:1)
这样的事情怎么样:
db.items.aggregate(
{ $unwind: "$items" } ,
{ $group : { _id : '$items.itemNumber', count : { $sum : 1 } } },
{ $match: { "count": { $gt: 1 } } }
)