标签: aggregation-framework

MongoDB:聚合框架:字段之间的$ match

我有一个包含两个文档的测试集合:

> db.test.find().pretty()
{ "_id" : ObjectId("510114b46c1a3a0f6e5dd7aa"), "a" : 1, "b" : 2 }
{ "_id" : ObjectId("510114c86c1a3a0f6e5dd7ab"), "a" : 3, "b" : 1 }
Run Code Online (Sandbox Code Playgroud)

使用聚合框架,我想只获取a大于b的文档.$ gt只获取参数中的值而不是字段...

> db.test.aggregate([{"$match":{"$a":{"$gt":"$b"}}}])
{ "result" : [ ], "ok" : 1 } /* don't work*/
Run Code Online (Sandbox Code Playgroud)

你有什么想法吗?

提前致谢

最好的祝福

mongodb aggregation-framework

19
推荐指数
2
解决办法
1万
查看次数

mongodb聚合框架的索引优化

match-unwind-group-sort在mongo 2.4.4中有一个聚合管道,我需要加快聚合.

匹配操作包含16个字段的范围查询.我已经使用该.explain()方法来优化范围查询(即创建复合索引).是否有类似的功能来优化聚合?我正在寻找类似的东西:

db.col.aggregate([]).explain()
Run Code Online (Sandbox Code Playgroud)

另外,我是否正确专注于索引优化?

indexing mongodb aggregation-framework

19
推荐指数
1
解决办法
1万
查看次数

Mongodb concat int和string

我正在尝试为我的集合中的所有文件投影FileName和FileSize,其大小为50 MB或更大,但我无法连接类型FileSize,因为它具有Int类型

我希望投影是

{
"result" : [ 
    {
        "_id" : ObjectId("5652c399a21dad0bb01b6308"),
        "FileName" : "1234567890.xml",
        "FileSize" : "11.06 MB"
    }, 
    {
        "_id" : ObjectId("5652c399a21dad0bb01b630f"),
        "FileName" : "2468101214.xml",
        "FileSize" : "320.48 MB"
    }, 
    {
        "_id" : ObjectId("5652c399a21dad0bb01b631f"),
        "FileName" : "3691215180.xml",
        "FileSize" : "12.95 MB"
    }
}
Run Code Online (Sandbox Code Playgroud)

但到目前为止,我只能返回以下内容

{
"result" : [ 
    {
        "_id" : ObjectId("5652c399a21dad0bb01b6308"),
        "FileName" : "1234567890.xml",
        "FileSize" : 11.0610504150390630
    }, 
    {
        "_id" : ObjectId("5652c399a21dad0bb01b630f"),
        "FileName" : "2468101214.xml",
        "FileSize" : 320.4827098846435500
    }, 
    {
        "_id" : ObjectId("5652c399a21dad0bb01b631f"),
        "FileName" : "3691215180.xml",
        "FileSize" : …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

19
推荐指数
3
解决办法
2万
查看次数

mongo:聚合$ project中的新Date()

对于我的一个集合,它必须保持unix时间戳而不是isodate,我通常将时间戳转换为新的Date(unix_timestamp).

现在我需要new Date(ts)聚合.(示例是在PHP中)

'$ project'=> array('day'=>'$ new Date(ts)',...

'$ group'=> array("_ id"=> array('day'=>'$ day)',...),...

没有到达结果.结果中的字段"日"完全丢失.

如何在聚合中转换?

mongodb aggregation-framework

18
推荐指数
2
解决办法
2万
查看次数

使用MongoDB嵌套分组

给定数据库的形式

[
{ gender: "m", age: 1, name: "A" },
{ gender: "f", age: 2, name: "B" },
{ gender: "m", age: 3, name: "C" },
{ gender: "f", age: 1, name: "D" },
{ gender: "m", age: 2, name: "E" },
{ gender: "f", age: 3, name: "F" },
{ gender: "m", age: 1, name: "G" },
{ gender: "f", age: 2, name: "H" },
{ gender: "m", age: 3, name: "I" },
{ gender: "f", age: 1, name: …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

18
推荐指数
1
解决办法
1万
查看次数

猫鼬 - 如何分组和填充?

我使用MongoDB和Mongoose作为我的ODM,我正在尝试使用populategroup by在同一语句中进行查询.

这是我的简单文档模型:

var userSchema = new Schema({
    username: String
});

var messageSchema = new Schema({
    from: { type: Schema.ObjectId, ref: 'User' },
    to: { type: Schema.ObjectId, ref: 'User' },
    message: String,
    date: { type: Date, default: Date.now }
});
Run Code Online (Sandbox Code Playgroud)

我只是试图为每个用户收集每条消息,由他与之交谈的每个用户进行分组.我试过这样的:

this.find({ 'to': user })
    .sort({ 'date': 1 })
    .group('from')
    .populate(['from', 'to'])
    .exec(callback);
Run Code Online (Sandbox Code Playgroud)

但是,不幸的是,我的模型没有group方法.你有任何解决方案,让这个工作吗?

谢谢.

javascript mongoose mongodb node.js aggregation-framework

18
推荐指数
2
解决办法
3万
查看次数

MongoDB按数组元素对文档进行排序

我的文档结构如下:

{
    map: 'A',
    points: [
        {
            type: 'type1',
            distanceToSpawn: 110
        },
        {
            type: 'type4',
            distanceToSpawn: 40
        },
        {
           type: 'type6',
           distanceToSpawn: 30
        }
    ]
},
{
    map: 'B',
    points: [
        {
            type: 'type1',
            distanceToSpawn: 100
        },
        {
            type: 'type2',
            distanceToSpawn: 60
        },
        {
            type: 'type3',
            distanceToSpawn: 25
        }
    ]
},
{
    map: 'C',
    points: [
        {
            type: 'type2',
            distanceToSpawn: 90
        },
        {
            type: 'type3',
            distanceToSpawn: 1
        },
        {
            type: 'type6',
            distanceToSpawn: 76
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我希望得到所有具有type1distanceToSpawn …

sorting mongodb mongodb-query aggregation-framework

18
推荐指数
1
解决办法
1万
查看次数

Mongo为两个或多个字段的条目查找重复项

我有这样的文件:

{
    "_id" : ObjectId("557eaf444ba222d545c3dffc"),
    "foreing" : ObjectId("538726124ba2222c0c0248ae"),
    "value" : "test",
}
Run Code Online (Sandbox Code Playgroud)

我想找到已复制的值对所有文件foreingvalue.

mongodb mongodb-query aggregation-framework

18
推荐指数
2
解决办法
2万
查看次数

Moongoose聚合$ match与id不匹配

我希望按ID(56e641d4864e5b780bb992c656e65504a323ee0812e511f2)显示产品,并在扣除减价后显示价格(如果有).

我可以使用聚合计算最终价格,但这会返回集合中的所有文档,如何使其仅返回匹配ID

"_id" : ObjectId("56e641d4864e5b780bb992c6"), 
"title" : "Keyboard", 
"discount" : NumberInt(10),
"price" : NumberInt(1000)

"_id" : ObjectId("56e65504a323ee0812e511f2"), 
"title" : "Mouse", 
"discount" : NumberInt(0),
"price" : NumberInt(1000)

"_id" : ObjectId("56d90714a48d2eb40cc601a5"), 
"title" : "Speaker", 
"discount" : NumberInt(10),
"price" : NumberInt(1000)
Run Code Online (Sandbox Code Playgroud)

这是我的疑问

productModel.aggregate([
        {
            $project: {
                title   : 1,
                price: {
                    $cond: {
                        if: {$gt: ["$discount", 0]}, then: {$subtract: ["$price", {$divide: [{$multiply: ["$price", "$discount"]}, 100]}]}, else: "$price"
                    }

                }
            }
        }
    ], function(err, docs){
        if (err){
            console.log(err)
        }else{
            console.log(docs) …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-query aggregation-framework

18
推荐指数
3
解决办法
1万
查看次数

MongoDB聚合错误:管道阶段规范对象必须只包含一个字段

我是mongodb的新手并且第一次尝试聚合.在这里,我试图按每15分钟对推文进行分组.当我尝试在mongo控制台中运行以下查询时,我收到错误:

管道阶段规范对象必须只包含一个字段.

    db.hashtag.aggregate([
    { "$group": {
        "_id": {
            "year": { "$year": "$tweettime" },
            "dayOfYear": { "$dayOfYear": "$tweettime" },
            "interval": {
                "$subtract": [ 
                    { "$minute": "$tweettime" },
                    { "$mod": [{ "$minute": "$tweettime"}, 15] }
                ]
            }
        }},
        "count": { "$sum": 1 }
    }
])
Run Code Online (Sandbox Code Playgroud)

我无法在SO中找到原因的好解释.请分享您对此主题的看法以及查询错误的原因.

mongodb mongodb-query aggregation-framework

18
推荐指数
1
解决办法
2万
查看次数