这就是我的数据集中文档的样子:
{
username: 'stack',
attempts: { 1517761701: false, 1512341532: true }
}
{
username: 'overflow',
attempts: { 1217563721: false }
}
现在,我想检索数据集中attempts
包含多个键的每个文档。因此查询应该返回用户'stack'的文档,而不是用户'overflow'的文档。我可以在这里申请什么查询?
答案 0 :(得分:1)
尝试$objectToArray
将对象转换为数组,如果使用mongo 3.6 +
db.cols.aggregate(
[
{$addFields: {count : {$size : {$ifNull : [{$objectToArray : "$attempts"}, []]}}}},
{$match: {count : {$gt : 1}}},
{$project: {count : 0}}
]
)
答案 1 :(得分:0)
对单个管道使用 $redact
:
db.collection.aggregate([
{
"$redact": {
"$cond": [
{
"$gt": [
{ "$size": {
"$objectToArray": {
"$ifNull": [
"$attempts",
{ }
]
}
} },
1
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
])
答案 2 :(得分:0)
将attempts
转换为数组$unwind
,然后使用$sortByCount
完成所有工作..
db.collection_name.aggregate( [
{ $addFields : { array : { $objectToArray : "$attempts"} } },
{ $unwind : "$array" },
{ $sortByCount : "$username" },
{ $match : { count : { $gte : 2 } } }
])
输出:
{
"_id" : "stack",
"count" : 2
}