0

关于此链接mongodb 查询:如何获取唯一条目

我试过这个命令,

db.userInfo.group({key: {userID: true}, initial: {filescount: 0}, reduce: function(doc, aggregator) { aggregator.filescount += 1;}});

这将返回如下所示,

[
    {
            "userID" : "50d002940cf2298e9721642d",
            "filescount" : 2
    },
    {
            "userID" : "50b9d10e0cf2362982338e38",
            "filescount" : 12
    }
]

这对于仅获取值的计数是可以的,我需要如下所示

[
    {
            "userID" : "50d002940cf2298e9721642d",
            "filescount" : 2,
            "filesTotalSize" : 1000,
            "physicalFilescount" : 1
    },
    {
            "userPID" : "50b9d10e0cf2362982338e38",
            "filescount" : 12,
            "filesTotalSize" : 10000,
            "physicalFilescount" : 10
    }
]

其中 filesTotalsize 是所有 filesSize 字段的总和,physicalFilescount 是用户集合中存储的物理文件数。

任何帮助都会对我表示赞赏和帮助。谢谢, Annamalai.Lk

4

1 回答 1

0

我使用以下 js 提取详细信息,

print("Number of Users info Collection is : "+db.user.find({},{_id:1}).count());
print("userID,EmailId,Age,Sex,fileCount,TotalPhysicalFiles,TotalFileSize");

//user is a collection based on that i get values from the userFiles collection
//(i.e) each user have some files in userFiles collection..
//So that i really want to get each users
//files count, actual files count, sizeused field values

db.user.find().forEach( function(user) {
var fileCount = 0;
var totalPhysicalFiles = 0;
if(user != undefined)
{       
    db.userFiles.find().forEach( function(userFiles) { 
        if(userFiles.userID == user._id)
        {
            fileCount++;
            if(userFiles.fileURL != undefined)
                totalPhysicalFiles++;
        }           
    });
    var userRoleId = user.appRole.$id;
    var userType = "";
    if(userRoleId == "01")
        userType = "ADMIN";
    else
        userType = "USER";
    print(user._id+","+user.userId+","+user.age+","+user.sex+","+fileCount+","+totalPhysicalFiles+","+user.sizeUsed);
}});

最后使用以下命令从命令提示符处执行此 js,

./mongo localhost:27017/testDB getUserCount.js > test.csv

它将在该路径中生成一个 csv 文件。

于 2013-04-18T12:19:50.963 回答