标签: aggregation-framework

获取MongoDB中数组的第n个元素

作为我在MongoDB中的文档的一部分,我正在存储一个对象数组.例如,如何仅查询数组的第4个元素?所以我不希望得到整个阵列,只是第4个元素.

mongodb mongodb-query aggregation-framework

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

在MongoDB中执行搜索/投影时如何重命名字段?

是否可以重命名查找查询中返回的字段名称?我想使用类似的东西$rename,但我不想改变我正在访问的文件.我只想以不同的方式检索它们,就像SELECT COORINATES AS COORDS在SQL中一样.

我现在应该做什么:

db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0})
{'level1': {'level2': {'coordinates': [10, 20]}}}
Run Code Online (Sandbox Code Playgroud)

我想要归还的是: {'coords': [10, 20]}

mongodb mongodb-query aggregation-framework

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

使用限制时,使用MongoDB获取总文档数

我有兴趣优化我正在使用MongoDB的"分页"解决方案.我的问题很直接.我通常会限制使用该limit()功能返回的文档数量.这迫使我发出一个没有该limit()函数的冗余查询,以便我也可以捕获查询中的文档总数,这样我就可以将其传递给客户端,让他们知道他们必须发出额外的请求.检索其余文件.

有没有办法将其压缩为1个查询?获取文档总数但同时仅使用limit()?检索子集?是否有不同的方式来思考这个问题,而不是接近它?

pagination mongodb casbah mongodb-query aggregation-framework

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

如何使用MongoDB将`$ lookup`聚合为`findOne()`

众所周知,find()返回一个结果数组,findOne()只返回一个简单的对象.

使用Angular,这会产生巨大的差异.{{myresult[0].name}}我可以简单地写一下,而不是去{{myresult.name}}.

我发现$lookup聚合管道中的方法返回结果数组而不是单个对象.

例如,我有两个收藏:

users 采集:

[{
  "firstName": "John",
  "lastName": "Smith",
  "country": 123
}, {
  "firstName": "Luke",
  "lastName": "Jones",
  "country": 321
}]
Run Code Online (Sandbox Code Playgroud)

countries 采集:

[{
  "name": "Australia",
  "code": "AU",
  "_id": 123
}, {
  "name": "New Zealand",
  "code": "NZ",
  "_id": 321
}]
Run Code Online (Sandbox Code Playgroud)

我的总计$lookup:

db.users.aggregate([{
  $project: {
    "fullName": {
      $concat: ["$firstName", " ", "$lastName"]
    },
    "country": "$country"
  }
}, {
  $lookup: {
    from: "countries",
    localField: "country",
    foreignField: "_id",
    as: "country" …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

MongoDB完整和部分文本搜索

ENV:

  • 使用MongoS的MongoDB(3.2.0)

采集:

  • 用户

文本索引创建:

  BasicDBObject keys = new BasicDBObject();
  keys.put("name","text");

  BasicDBObject options = new BasicDBObject();
  options.put("name", "userTextSearch");
  options.put("unique", Boolean.FALSE);
  options.put("background", Boolean.TRUE);

  userCollection.createIndex(keys, options); // using MongoTemplate
Run Code Online (Sandbox Code Playgroud)

文献:

  • { "名": "莱昂内尔"}

查询:

  • db.users.find( { "$text" : { "$search" : "LEONEL" } } ) =>找到了
  • db.users.find( { "$text" : { "$search" : "leonel" } } ) => FOUND(搜索caseSensitive为false)
  • db.users.find( { "$text" : { "$search" : "LEONÉL" } } ) => FOUND(使用diacriticSensitive搜索为false)
  • db.users.find( { "$text" : { "$search" : "LEONE" } } …

full-text-indexing mongodb mongodb-query aggregation-framework spring-data-mongodb

32
推荐指数
5
解决办法
3万
查看次数

使用mongod在utc中存储日期时如何处理时区问题?

我有一个mongodb集合,其中每个文档都有一些属性和一个utc时间戳.我需要从集合中提取数据并使用聚合框架,因为我使用集合中的数据在用户界面上显示一些图表.但是,我需要根据用户的时区进行聚合.假设我知道用户的时区(通过浏览器或其他方式传递请求),有没有办法使用聚合框架根据[客户端]时区进行聚合?

timezone mongodb mongoid aggregation-framework

31
推荐指数
3
解决办法
5万
查看次数

$在聚合框架中展开对象

在MongoDB聚合框架中,我希望在对象(即JSON集合)上使用$ unwind运算符.看起来这不可能,是否有解决方法?有计划实施吗?

例如,从聚合文档中获取文章集合.假设有一个额外的字段"评级"是来自用户 - >评级的地图.你能算出每个用户的平均评分吗?

除此之外,我对聚合框架非常满意.

更新:这是每个请求的JSON集合的简化版本.我正在存储基因组数据.我不能真正使基因型成为一个数组,因为最常见的查找是获取随机人的基因型.

variants: [

    {
        name: 'variant1', 
        genotypes: {

            person1: 2,
            person2: 5,
            person3: 7,

        }
    }, 

    {
        name: 'variant2', 
        genotypes: {

            person1: 3,
            person2: 3,
            person3: 2,

        }
    }

]
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

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

如何使用mongoose find获取包含字符串一部分的所有值?

我有使用mongoose从MongoDB检索数据的以下问题.

这是我的架构:

const BookSchema = new Schema(
    {
        _id:Number,
        title:String,
        authors:[String],
        subjects:[String]   
    }
);
Run Code Online (Sandbox Code Playgroud)

你可以看到我在对象中嵌入了2个数组,让我们说作者的内容可以是这样的:作者:["Alex Ferguson","Didier Drogba","Cristiano Ronaldo","Alex"]
我是什么我想要实现的是获得阵列中的所有Alex.

到目前为止,我已经能够获得值,如果它们完全匹配值.但是,如果我试图获得包含Alex的那些答案总是[].

我想知道的是我如何使用find()执行此操作而不执行map-reduce来创建视图或集合,然后对其应用find().

这里的代码适用于完全匹配

Book.find( {authors:req.query.q} , function(errs, books){
            if(errs){
                res.send(errs); 
            }

            res.json(books);
        });
Run Code Online (Sandbox Code Playgroud)

我尝试了一些但没有运气{authors:{$ elemMatch:req.query.q}} {authors:{$ in:[req.query.q]}}

这个给了我一个错误,而且最重要的是我在这里发现的另一篇文章效率非常低.{$ where:this.authors.indexOf(req.query.q)!= -1}

我也试过{作者:{$ regex:"./ value/i"}}

map-reduce工作正常,我需要使用其他方法使其工作,看哪哪个更好?

任何帮助是极大的赞赏.我确信这很容易,但我是NodeJS和Mongo的新手,我无法自己解决这个问题.

regex mongodb node.js mongodb-query aggregation-framework

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

嵌套数组的MongoDB投影

我有一个集合"帐户",其中包含类似于此结构的文档:

{
    "email" : "john.doe@acme.com",
    "groups" : [
        {
            "name" : "group1",
            "contacts" : [
                { "localId" : "c1", "address" : "some address 1" },
                { "localId" : "c2", "address" : "some address 2" },
                { "localId" : "c3", "address" : "some address 3" }
            ]
        },
        {
            "name" : "group2",
            "contacts" : [
                { "localId" : "c1", "address" : "some address 1" },
                { "localId" : "c3", "address" : "some address 3" }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

通过

q …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

MongoDB嵌套查找有3个级别

我需要从数据库中检索整个单个对象层次结构作为JSON.实际上关于实现这一结果的任何其他解决方案的提议将受到高度关注.我决定使用MongoDB及其$ lookup支持.

所以我有三个系列:

派对

{ "_id" : "2", "name" : "party2" }
{ "_id" : "5", "name" : "party5" }
{ "_id" : "4", "name" : "party4" }
{ "_id" : "1", "name" : "party1" }
{ "_id" : "3", "name" : "party3" }    
Run Code Online (Sandbox Code Playgroud)

地址

{ "_id" : "a3", "street" : "Address3", "party_id" : "2" }
{ "_id" : "a6", "street" : "Address6", "party_id" : "5" }
{ "_id" : "a1", "street" : "Address1", "party_id" : "1" }
{ "_id" …
Run Code Online (Sandbox Code Playgroud)

lookup mongodb mongodb-query aggregation-framework

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