小编Ash*_*shh的帖子

按数组长度排序mongodb查询

我有像下面这样的 MongoDB 文档:是否有查询以 subscribedGroups 的长度对文档进行排序?可以是升序或降序。

{ 
    "_id" : ObjectId("58c29d9ec79d585c0e16b110"), 
    "subscribedGroups" : [
      ObjectId("5b28a9190c8c0d0014b03a0c"), 
      ObjectId("5b2930650b813a0014a3294d"), 
      ObjectId("5b29f1b5243d470014d6d351")
    ]
}
Run Code Online (Sandbox Code Playgroud)

mongodb node.js mongodb-query aggregation-framework

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

更新查询mongoDB中的增量值

我正在尝试在猫鼬函数中添加两个值。

这是我使用的函数:

Equipa.findOne({ '_id': req.params.equipaID }, function (error, equipa) {
  if (error) {
    return (error);
  }

  if (util.isNullOrUndefined(equipa)) {
    return res.status(204).end()
  }

  console.log(equipa.distanciaTotal + "------" + req.body.distanciaPercorrida),
  { total : {$add[equipa.distanciaTotal,req.body.distanciaPercorrida]}},
  console.log(total)  
});
Run Code Online (Sandbox Code Playgroud)

equipa.distanciaTotal和中的值req.body.distanciaPercorrida是正确的,Equipa由 找到的值也是正确的Equipa.findOne

我认为更新文档会很好,但我根本无法添加这两个值。

javascript addition mongoose mongodb node.js

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

分组后如何对数组值进行排序 - mongodb

我已将数据与收藏夹分组,并已推入数组。我想使用对象键对数组进行排序,例如姓名、电子邮件或年龄。

 {
                        $group:
                        {
                            _id: "$favourite",
                            favourite: { $first: "$favourite" },
                            data: {
                                $push: {
                                    "name": "$name",
                                    "email": "$email",
                                    "age": "$age"
                                }
                            }
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的代码,但它不起作用。

  { "$sort": { "data.name": 1 } }
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

mongoose mongodb node.js mongodb-query aggregation-framework

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

使用 UNIX 毫秒时间的 Mongo groupby 月份

我有一个 Mongo 集合,如下所示:

[{
    id: 1,
    timestamp: 1534488870841,
    type: 'deposit'
}, {
    id: 1,
    timestamp: 1534488915119,
    type: 'deposit'
}]
Run Code Online (Sandbox Code Playgroud)

如何查询以列出deposit按月份分组的所有交易。

必须使用timestamp属性(UNIX 毫秒)计算月份。

我可以按如下方式获得存款,但我不确定如何分组:

db.getCollection('transactions').find(
{"type":"deposit"});
Run Code Online (Sandbox Code Playgroud)

编辑:Mongo 3.4 版

mongodb mongodb-query aggregation-framework

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

排除$ lookup聚合中的字段

我正在查询3个我想排除_id在输出中所有位置的集合之间

我的输出是:

{
    "_id" : ObjectId("5b6aed5f9bcdb5d4ae64aef5"),
    "userID" : "1",
    "skills" : [ 
        {
            "_id" : ObjectId("5b766b5f1365a4940bb6050f"),
            "skillID" : "javaid",
            "skillname" : "????",
            "languageID" : "hindiid"
        }, 
        {
            "_id" : ObjectId("5b766b8c1365a4940bb60535"),
            "skillID" : "pythonid",
            "skillname" : "?????",
            "languageID" : "hindiid"
        }
    ],

    "gender" : {
        "_id" : ObjectId("5b7687cd2a2329043e2383d5"),
        "genderID" : "femaleid",
        "gendername" : "?????",
        "languageID" : "hindiid"
    }
}
Run Code Online (Sandbox Code Playgroud)

查询:

db.User.aggregate([
  { "$match": { "userID":"1" }},
  { "$lookup":{
    "from": "Skill",
    "pipeline": [
      { "$match": { "languageID": "hindiid", "skillID": { …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

SQL 'UNION ALL' 类似于 MongoDB 中的实现

有两个集合:

销售量

{
  "_id" : ObjectId("5ba0bfb8d1acdc0de716e839"),
  "invoiceNumber" : 1,
  "saleDate" : ISODate("2018-09-01T00:00:00.000Z"),
  "totalTaxAmount" : 613,
  "subTotalAmount" : 2000,
  "totalAmount" : 2613,
  "balance" : 2613,
  "financialYear" : "2018-2019",
  "modeOfPayment" : "Digital Transfer",
  "customerName": "Acme Inc"
}
Run Code Online (Sandbox Code Playgroud)

交易

{
  "_id" : ObjectId("5bbb4e131fb8af0dc645212d"),
  "transactionNumber" : 1    
  "transactionDate" : ISODate("2018-09-03T00:00:00.000Z"),
  "transactionType" : "Income",
  "partyName" : "Acme Inc",
  "transactionMode" : "Digital Transfer",
  "amount" : 2613,
  "paidItems" : [ 
      {
          "orderId" : "5b90a7d62bb5a21be4ff97e3",
          "invoiceNumber" : "1",
          "orderType" : "sale",
          "totalAmount" : 2613,
          "balance" : 613,
          "payingAmount" …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js mongodb-query aggregation-framework

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

在数组中查找 ObjectId

我有商店集合和用户集合,其中包含商店 id 列表作为字符串。

店铺文件示例:

    {
            "_id" : ObjectId("5a0c6797fd3eb67969316ce2"),
            "picture" : "http://placehold.it/150x150",
            "name" : "Genmom",
            "email" : "leilaware@genmom.com",
            "city" : "Rabat",
            "location" : {
                    "type" : "Point",
                    "coordinates" : [
                            -6.79387,
                            33.83957
                    ]
            }
    }
Run Code Online (Sandbox Code Playgroud)

用户集合示例:

{
            "_id" : ObjectId("5c04b943ff491824b806686a"),
            "email" : "ayoub.khial@gmail.com",
            "password" : "$2a$10$4Wt5Rn6udxREdXCIt3hGb.sKhKUKOlyiYKmLTjYG3SqEPKFSw9phq",
            "likedShops" : [
                    "5a0c6797fd3eb67969316ce2",
                    "5c07ada8ff49183284e509d1",
                    "5c07acc1ff49183284e509d0"
            ],
            "dislikedShops" : [ ]
}
Run Code Online (Sandbox Code Playgroud)

我想返回喜欢的商店的详细信息。

database mongodb mongodb-query aggregation-framework

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

mongodb - 没有本地的聚合查找

所以我有两个ObjectId位于不同集合中的 s,我希望将其合并为输出。所以这就像使用$lookup没有任何本地字段的函数一样。如果没有聚合,我可以简单地执行两个操作.findOne,但这需要两次 API 调用(这将创建两个连接)。有可能一并实现吗?

因此,如果没有聚合,它看起来就像这样:

let main_document =
    db.findOne({
        _id: ObjectId(first)
    })

let subdocument =
    db.findOne({
        _id: ObjectId(second)
    })

main_document.subdocument = subdocument

return main_document
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb mongodb-query aggregation-framework

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

减少mongodb中的值

我正在创建一个购物应用程序。每个用户都有钱包。结构如下:

{ 
    "userName" : "Gandalf the Grey",
    "wallet" : 100,
    "orderHistory" : []
}
Run Code Online (Sandbox Code Playgroud)

假设该用户购买了 50 件的商品。有没有更好的方法而不是用 findOne 获取其钱包值,然后进行减法并更新新的钱包值?现在,我正在通过两种不同的操作来实现它,看起来像

dbo.collection('users').findOne({'userName': controller.userName})
.then(function(doc) { 
    updateWallet(doc); 
}
Run Code Online (Sandbox Code Playgroud)

然后

let newWalletBalance = doc.wallet - product.cost;
dbo.collection('users').updateOne(
    {'userName':controller.userName},
    { $set: {wallet: newWalletBalance } }
);
Run Code Online (Sandbox Code Playgroud)

是否有可能将它们合而为一?

mongodb node.js mongodb-query

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

在$ lookup之后获取值作为元素数组

对于MongoDB,当$lookup用于查询多个集合时,是否可以获取在$lookup?中返回的字段的仅值列表?

我不想要的是完整对象及其所有键/值的列表。

资料

failover_tool:PRIMARY> db.foo.find().pretty()
{
    "_id" : ObjectId("5ce72e415267960532b8df09"),
    "name" : "foo1",
    "desc" : "first foo"
}
{
    "_id" : ObjectId("5ce72e4a5267960532b8df0a"),
    "name" : "foo2",
    "desc" : "second foo"
}
failover_tool:PRIMARY> db.bar.find().pretty()
{
    "_id" : ObjectId("5ce72e0c5267960532b8df06"),
    "name" : "bar1",
    "foo" : "foo1"
}
{
    "_id" : ObjectId("5ce72e165267960532b8df07"),
    "name" : "bar2",
    "foo" : "foo1"
}
{
    "_id" : ObjectId("5ce72e1d5267960532b8df08"),
    "name" : "bar3",
    "foo" : "foo2"
}
Run Code Online (Sandbox Code Playgroud)

所需查询输出

{
    "_id" : ObjectId("5ce72e415267960532b8df09"),
    "name" : "foo1",
    "desc" : "first …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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