标签: mongodb-aggregation

Mongodb WeekofMonth?

我坚持实现weekofMonth而不是WeekofYear. 有人可以指导我如何做到这一点吗?

db.activity.aggregate([
    {
        $group:{
            _id: {
                week: { $week: "$createdAt" }, 
                month: { $month: "$createdAt" },      
                year: { $year: "$createdAt" } 
            },
            count: { $sum: 1 }
        }
     },
     { $match : { "_id.year" : 2016, "_id.month" : 5 } }
])
Run Code Online (Sandbox Code Playgroud)

输出

/* 1 */
{
    "_id" : {
        "week" : 19,
        "month" : 5,
        "year" : 2016
    },
    "count" : 133.0
}

/* 2 */
{
    "_id" : {
        "week" : 18,
        "month" …
Run Code Online (Sandbox Code Playgroud)

date-format mongodb mongodb-aggregation

5
推荐指数
1
解决办法
977
查看次数

mongodb - 查找其他集合中的值计数

我想找到 collectionTwo 中存在多少个 collectionOne 以下的“taskId”。此处,collectionOne 下面的“taskId”嵌入在文档中的数组中。

另外,让我知道执行此操作的不同方法(如果可能)。

db.collectionOne.find({"sId":"DCNrnPeKFrBv" }).pretty()
{
        "_id" : "sX8o7mJhebs",
        "sId" : "DCNrnPeKFrBv",
        "data" : [
                {
                        "oId" : "7SycYQ",
                        "taskId" : 146108906
                },
                {
                        "oId" : "7SycYQ",
                        "taskId" : 14623846
                },
                {
                        "oId" : "fANQ",
                        "taskId" : 1461982
                },
                {
                        "oId" : "fAeNQ",
                        "taskId" : 131732
                },
                {
                        "oId" : "t6AF5yn",
                        "taskId" : 197681
                }
        ]
}



> db.collectionTwo.find().pretty().limit(2)
{
        "_id" : 146108906,
        "oId" : "7SycYQ",
        "name" : "ABC"
}
{
        "_id" : 1461982,
        "oId" : …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework mongodb-aggregation

5
推荐指数
1
解决办法
6381
查看次数

MongoDB节点驱动程序当前聚合的计数

我正在使用mongodb作为节点,我正在尝试根据一些设置过滤器聚合一组文档,然后将其限制为10.我将它聚合得很好并且限制很好但是我需要在之前获得聚合文档的总数我把它们限制在10.

这是我的代码.

var qry = [];
if (filter.FocusArea && filter.FocusArea != "(None)") {
    qry.push({
        $match: { 'ProgramAreaId': filter.FocusArea }
    });
}
if (filter.Status && filter.Status != "(None)") {
    qry.push({
        $match: { 'StatusId': filter.Status }
    });
}
if (filter.ProgOfficer && filter.ProgOfficer != "(None)") {
    qry.push({
        $match: { 'ProgramOfficerId': filter.ProgOfficer }
    });
}
if (filter.Fund && filter.Fund != "(None)") {
    qry.push({
        $match: { 'FundId': filter.Fund }
    });
}
 var skipNbr = (parseInt(filter.Page) * 10 - 10);
qry.push({ $project: { _id: '$_id', count: …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js aggregation-framework mongodb-aggregation

5
推荐指数
1
解决办法
298
查看次数

对象数组中的 Mongo DB 不同值组

假设我有一个像下面这样的文档模型

{
"_id" : "QggaecdDWkZzMmmM8",
"features" : [ 
    {
        "language" : "en",
        "values" : [ 
            {
                "name" : "feature 1",
                "values" : [ 
                    "test", 
                    "best"
                ]
            }, 
            {
                "name" : "feature2",
                "values" : [ 
                    "guest", 
                    "nest"
                ]
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要运行查询并返回特征的唯一名称和值对。就像一个文档的名称特征 1 带有“test”和最佳值,另一个文档具有相同的键(特征 1 具有不同的值,即“guest”),因此结果将是

name: featuer 1 
values: [test, best and guest]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试了以下查询,但最后返回错误

db.getCollection('products').aggregate(
{$unwind: '$features'},
{$group: 
{_id: "$features.values.name"},
name: {$addToSet: '$name'}
})
Run Code Online (Sandbox Code Playgroud)

错误信息是

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

mongodb mongodb-query aggregation-framework mongodb-aggregation

5
推荐指数
1
解决办法
2422
查看次数

聚合查询中mongo db投影内的操作

我正在研究搜索功能.我有一个对象包含键值对中的数据,其中键是一个对象的id,值是我用一些后台进程计算的分数.所以我的搜索论坛数据中的情况我必须添加之前用新分数计算的分数.

我正在使用聚合进行搜索操作.以下是我的代码段.

文献


 {
   "_id": ObjectId("57de00eb0b1e50fa66290198"),
   "id": "205332",
   "Title": "The relationship between bispectral index values and age in children",
   "title": "Bispectral index values during general anesthesia in children",
   "OutcomesAvailable": "No",
   "DateStart": "2011-03-10T00:00:00-06:00",
   "DateEnd": {
      "type": "actual",
      "value": "2012-05-01T00:00:00-05:00"
    },
   "DateChangeLast": "2014-07-21T11:39:54-05:00",
   "gender": "N/A",
  "highAge": NumberInt(12),
  "lowAge": 0.5,
  "recordType": "xxxxxxxx",
  "__v": NumberInt(0) 
 }  


Object containing key as document id and value as score
-------------------------------------------------------
var textSearch = 'cancer';

var test_ids = {
    '277313',
    '278237',
    '278356',
    '278547' 
 }

 scoresArr = { 
  '277313': …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mongodb-query mongodb-aggregation

5
推荐指数
0
解决办法
253
查看次数

在整个集合中查找字符串字段中最常用的单词

假设我有一个类似于以下内容的Mongo集合:

[
  { "foo": "bar baz boo" },
  { "foo": "bar baz" },
  { "foo": "boo baz" }
]
Run Code Online (Sandbox Code Playgroud)

是否有可能确定哪些单词最常出现在foo字段中(理想情况下是计数)?

例如,我喜欢以下结果:

[
  { "baz" : 3 },
  { "boo" : 2 },
  { "bar" : 2 }
]
Run Code Online (Sandbox Code Playgroud)

string mapreduce mongodb aggregation-framework mongodb-aggregation

4
推荐指数
1
解决办法
1113
查看次数

使用mgo驱动程序在golang中进行mongo聚合查询

我在mongodb中有以下查询 -

db.devices.aggregate({
$match: {userId: "v73TuQqZykbxFXsWo", state: true}},
{
  $project: {
    userId: 1,
    categorySlug: 1,
    weight: { 
      $cond: [ 
        {"$or": [  
          {$eq: ["$categorySlug", "air_fryer"] }, 
          {$eq: ["$categorySlug", "iron"] } 
        ] }, 
      0, 1] } 
    } },  
    {$sort: {weight: 1}},
    { $limit : 10 }
);
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用mgo驱动程序在golang中编写这个,但根本无法解决这个问题!

如何将其翻译为golang mgo查询?

go mongodb mgo aggregation-framework mongodb-aggregation

4
推荐指数
1
解决办法
3115
查看次数

Mongodb - 如何使用聚合文本搜索和查找查询

我在 Mongodb 中使用聚合方法来进行文本搜索。我已经尝试了各种方法,但仍然找不到过滤结果的正确方法。我已经设置了一个索引,它仅适用于 $text 搜索,也适用于查询。

这是我进行文本搜索的代码:

Model.aggregate([
    { $match: { $text: { $search: searchValue } } },
    { $project: { displayTitle: 1, title: 1, body: 1, _type: 1, _id: 1, score: { $meta: "textScore" } } },
    { $match: { score: { $gt: 1.0 } } }
], function (err, models) {

})
Run Code Online (Sandbox Code Playgroud)

但是我希望能够通过此查询进一步过滤模型:

Model.find({_parentIds: {$in: arrayOfIds}})
Run Code Online (Sandbox Code Playgroud)

我本以为这会起作用:

Model.aggregate([
    { $match: { $text: { $search: searchValue }, _parentIds: {$in: arrayOfIds} } },
    { $project: { displayTitle: 1, title: 1, body: …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-aggregation

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

在mongo aggregate $ lookup查询中使用数组第一个字段来匹配文档

我想使用我的数组字段第0个值来使用Mongo aggregate $ lookup查询在销售文档中查找匹配项.这是我的查询:

db.products.aggregate([ 
{ 
    $match : { _id:ObjectId("57c6957fb190ecc02e8b456b")  }  
},
{
    $lookup : {
        from : 'sale',
        localField: 'categories.0', 
        foreignField: 'saleCategoryId', 
        as : 'pcSales'  
    }
}]);
Run Code Online (Sandbox Code Playgroud)

结果:

{
"_id" : ObjectId("57c6957fb190ecc02e8b456b"),   
"categories" : [
    "57c54f0db190ec430d8b4571"
],  
"pcSales" : [
    {
        "_id" : ObjectId("57c7df5f30fb6eacb3810d1b"),                       
        "Title" : "Latest Arrivals",
    }
]}
Run Code Online (Sandbox Code Playgroud)

此查询将返回一个匹配,但当我检查它不匹配.我不知道为什么会发生这种情况,当我从查询中删除第0部分时它返回空白数组.像这样:

{
    "_id" : ObjectId("57c6957fb190ecc02e8b456b"),   
    "categories" : [
        "57c54f0db190ec430d8b4571"
    ],  
    "pcSales" : []
}
Run Code Online (Sandbox Code Playgroud)

saleCategoryId也是一个包含categoriesKey数组的数组字段.

请帮忙.

mongodb mongodb-query aggregation-framework mongodb-aggregation

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

在 Mongoose 中使用连接和过滤器进行查询

我是 Mongodb 的新手,并且在我使用 MEAN 堆栈构建的 Web 应用程序中使用它。我的目标是通过连接两个表并对它们应用过滤条件来查询它们。例如:我有两个表 - 自行车-自行车 ID、注册号、品牌、型号和预约 - 预约日期、状态、自行车(参考自行车对象),我只想显示那些没有预约状态=的自行车“已预订”。我想在 Mongoose 中完成以下 SQL。

Select bike.* from Bike inner join Appointment on Bike.BikeID = Appointment.BikeID and Appointment.Status != 'Booked'
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码,但没有得到所需的结果。有人可以帮我解决这个问题吗?

app.get('/api/getbikeappo*',function(req,res){
        var msg="";
        //.find({cust:req.query._id})
        //.populate('cust','email')
        ubBike.aggregate([
                {
                    $match:
                    {
                        cust : req.query._id
                    }
                },
                {
                    $lookup:
                    {
                        from: "appos",
                        localField: "_id",
                        foreignField: "bike",
                        as : "appointments"
                    }
                },
                {
                    $match:
                    {
                        "appointments" : {$eq : []}
                    }
                }
            ])
            .exec(function(err,bikes){
                 res.send(bikes);
                if(err) throw err;
            });
    }); 
Run Code Online (Sandbox Code Playgroud)
bikes - collection …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb aggregation-framework mean-stack mongodb-aggregation

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