小编Ash*_*shh的帖子

查找聚合中的管道在 mongodb 中不起作用

我是 mongodb 的新手,所以我希望这不会成为一个非常基本的问题。我做了一些研究,并试图应用我所发现的东西,但有些东西似乎让我忽略了。

我有两个以下格式的集合:

-----------------------------------------------------------------------
Shop
-----------------------------------------------------------------------
{
    "shopId": "1002",
    "shopPosId": "10002",
    "description": "some description"
}

-----------------------------------------------------------------------
Compte
-----------------------------------------------------------------------
{
    "shopId": "9000",
    "shopPosId": "0000",
    "clientUid": "474192"
}
Run Code Online (Sandbox Code Playgroud)

我想加入这些,在这样做之前,我想过滤掉Shop没有该shopPosId字段的 s 。

这是我的代码:

Compte.aggregate([
    {
        $match:
            { 
                $and:[{"clientUid":clientUid}]
            }
    },
    {      
        $lookup:
        {
            from: "Shop",
            localField: "shopId",
            foreignField: "shopId",
            let: {"Shop.shopPosId": "$shopPosId"},
            pipeline: [{$match: {"shopPosId": {"$exists": false}}}],
            as: "shopDescr"
        }
        }]
);
Run Code Online (Sandbox Code Playgroud)

返回的结果是 an undefined,这意味着查询没有多大意义(因为实际上我至少应该得到一个 void 数组)。

难道是因为两个集合都有字段shopPosId?(如果是这样,这条线不let: {"Shop.shopPosId": "$shopPosId"}应该处理它吗?)

mongoose mongodb mongodb-query aggregation-framework

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

获取总计数和Mongoose Query skip&limt

我有一个包含许多对象的json数据.我想限制分页数据,我需要总项数.请帮忙.

Model.find().skip((pageNumber-1)*limit).limit(limit).exec()
Run Code Online (Sandbox Code Playgroud)

我想要计数和跳过数据作为回应.

database mongoose mongodb node.js aggregation-framework

7
推荐指数
4
解决办法
6556
查看次数

$lookup 当 foreignField 在嵌套数组中时

我有两个集合:

学生

 {    
    _id: ObjectId("657..."),  
    name:'abc'
 },  
 {  
    _id: ObjectId("593..."),  
    name:'xyz'
 }
Run Code Online (Sandbox Code Playgroud)

图书馆

 {    
    _id: ObjectId("987..."),  
    book_name:'book1',
    issued_to: [
      {
       student: ObjectId("657...")
      },
      {
       student: ObjectId("658...")
      }
    ]
 },  
 {  
    _id: ObjectId("898..."),  
    book_name:'book2',
    issued_to: [
     {
       student: ObjectId("593...")
     },
     {
       student: ObjectId("594...")
     }
   ] 
 }
Run Code Online (Sandbox Code Playgroud)

我想创建一个 Join to Student集合,该集合存在于Library集合的对象字段的issue_to数组中。

我想对学生收藏进行查询以获取学生数据以及图书馆收藏,如果学生存在或不存在,它将检查issued_to数组,否则获取图书馆文档。我试过 $lookup of mongo 3.6 但我没有成功。

db.student.aggregate([{$match:{_id: ObjectId("593...")}}, $lookup: {from: 'library', let: {stu_id:'$_id'}, pipeline:[$match:{$expr: {$and:[{"$hotlist.clientEngagement": "$$stu_id"]}}]}])
Run Code Online (Sandbox Code Playgroud)

但它会引发错误,请在这方面帮助我。我还查看了在 stackoverflow 上提出的其他问题,例如。上计算器问题对问题2计算器但这些comapring简单字段不是对象的数组。请帮我

mongodb mongodb-query aggregation-framework

7
推荐指数
1
解决办法
3530
查看次数

mongodb 中的数组过滤器

我有以下架构。

{
   posts: [
          {
             _id: '5ayuunbdsyuuuyut778'
             replies: [{
                 _id: "67hfudj7e9whduu888",
                 text: "something"
             }]
          }
      ]
}
Run Code Online (Sandbox Code Playgroud)

我想更新文字,特别是回复。我正在使用猫鼬。

我已将查询编写如下

Post.findOneAndUpdate(
   {'posts.replies._id': _id}, 
   {$set: {'posts.$[post].replies.$[reply].text': "something1"}},
   { arrayFilters: [{'post._id': postId}, { 'reply._id': _id }]}
 )
Run Code Online (Sandbox Code Playgroud)

此查询未更新文档。

我错过了什么吗?我是否需要使用 ObjectId 来转换 ids

mongoose mongodb mongodb-query

7
推荐指数
1
解决办法
6304
查看次数

如何计算 mongo db 中的 $lookup 字段?

我在 mongodb 中很新,现在我需要计算一个 $lookup 字段,这可能吗?

我有这样的事情:

result = await company.aggregate([
  {
    $lookup: {
      from: 'userFocus',
      localField: '_id',
      foreignField: 'value',
      as: 'focusUsers'
    }
  },
  {
    $project:{
      name: 1,
      focusUsers: {userId: 1}
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

结果如下所示:

[
  {_id: 'xxxx', name: 'first company', focusUsers: [user1, user2, user3...]},
  {_id: 'yyyy', name: 'second company', focusUsers: []},
  {_id: 'zzzz', name: 'third company', focusUsers: []}
]
Run Code Online (Sandbox Code Playgroud)

现在我想要一个额外的列显示 focusUsers 计数,换句话说,我想要一个如下所示的结果:

[
  {_id: 'xxxx', name: 'first company', focusUsers: [user1, user2, user3], focusCount: 3},
  {_id: 'yyyy', name: 'second company', focusUsers: …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

7
推荐指数
1
解决办法
3140
查看次数

在猫鼬中反向填充

我怎样才能在 mongo 中反向填充。我有 2 个架构

用户:

var user_scheme = new mongoose.Schema({
  name:String,
  age:Number,
  roles:{
    type:mongoose.Schema.Types.ObjectId,
    ref:'Role'
  }
 });
Run Code Online (Sandbox Code Playgroud)

角色:

var role_scheme = new mongoose.Schema({
  name:String,
});
Run Code Online (Sandbox Code Playgroud)

文件:

///user
{
"_id" : ObjectId("5bf9a19b01ce3e19b440aed8"),
"name" : "user1",
"age" : 22,
"roles" : ObjectId("5c0242621ab7b677e6b2e01e"),
"__v" : 0
}
 ///role
{
"_id" : ObjectId("5c0242621ab7b677e6b2e01e"),
"name" : "Admin"
}
Run Code Online (Sandbox Code Playgroud)

代码:

User.find().populate('roles').exec(function (err, data) {
 res.json(data);
})
Run Code Online (Sandbox Code Playgroud)

在这里我可以在用户下获得角色,但是我如何在每个角色下获得用户。

mongoose mongodb node.js mongodb-query aggregation-framework

7
推荐指数
2
解决办法
3648
查看次数

MongoDB中$和$$的区别

我想知道MongoDB$$$MongoDB之间有什么区别。

例如:

    '$sum': {
        '$map': {
            'input': '$data',
            'as': 'currentData',
            'in': { '$size': '$$currentData.d' }
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我将使用$而不是$$in 呢$$currentData.d

mongodb aggregation-framework

7
推荐指数
1
解决办法
2550
查看次数

将iso日期转换为mongo查询中的时间戳

这是查询

[
    { 
        "$project": {
            "formattedDate": { 
                "$dateToString": { "format": "%Y-%m-%d", "date": "$ceatedAt" } 
            },
            "createdAtMonth": { "$month": "$ceatedAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$formattedDate",
             "average": { "$avg": "$rating" },
             "month": { "$first": "$createdAtMonth" },
         }
    }
]
Run Code Online (Sandbox Code Playgroud)

我需要时间戳中的日期.怎么做?

date mongodb mongodb-query aggregation-framework

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

在 mongodb 中使用字符串日期格式进行查询

我的 mongoDB 集合中有如下数据。我想在今天的基础上计算总数或search_term。

_id:ObjectId("5b7e1d38981cdc1a7c8bb5fc")
search_term:"Baiyoke Boutique"
date:"August 23rd 2018, 9:34:32 am"

_id:ObjectId("5b7e1fa8fa27fd2754080ad9")
search_term:"Baiyoke Boutique"
date:"August 23rd 2018, 9:44:56 am"

_id:ObjectId("5b7e28314d2d0f388c1596cd")
search_term:"Baiyoke Florting Market"
date:"August 23rd 2018, 10:21:21 am"
Run Code Online (Sandbox Code Playgroud)

我试过以下查询。我已经使用了时刻。我不是我犯了什么错误。

var start = moment().startOf('day');
var end = moment().endOf('day');

history.find({
    date: {
        $gte: start,
        $lt: end
    }
    }).count().toArray(
    function (e, res) {
        if (e) callback(e)
        else callback(null, res)
});
Run Code Online (Sandbox Code Playgroud)

mongodb node.js mongodb-query aggregation-framework

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

$lookup 具有相同的集合

我是 MongoDB 的新手,所以我不确定我是否正确地表达了我的问题。

我有一个集合,其中的数据如下所示:

{ 
    "_id" : ObjectId("66666"), 
    "Id" : 994, 
    "PostType" : 1, 
    "AnswerId" : 334, 
    "CreationDate" : ISODate("1994-09-05T09:34:36.177+0000"), 
    "Tags" : "test", 
    "Parent" : null, 
}

{ 
    "_id" : ObjectId("8888"), 
    "Id" : 334, 
    "PostTypeId" : 2, 
    "AnswerId" : NaN, 
    "CreationDate" : ISODate("20005-08-03T11:29:42.880+0000"), 
    "ParentId" : 994
}
Run Code Online (Sandbox Code Playgroud)

两个文档都在同一个集合中,我尝试使用 PostType:1 文档中的 AnswerId,并使用该值作为主 ID 来提取其 CreationDate。

这是我试图实现的逻辑,但它似乎不起作用:

db.collection.aggregate([
    {$project:{_id:"$Id", Title:"$Title", Answerid:"$AnswerId", QuestionDate:"$CreationDate"}},
    {$match:{Id:"$Answerid"}},
    {$project:{AnswerDate:"$CreationDate"}}
])
Run Code Online (Sandbox Code Playgroud)

我愿意接受任何建议。

mongodb mongo-shell mongodb-query nosql-aggregation aggregation-framework

6
推荐指数
1
解决办法
3771
查看次数