【问题标题】:Get specific values from nested arrays elements in mongo collection从 mongo 集合中的嵌套数组元素中获取特定值
【发布时间】:2014-02-22 02:46:17
【问题描述】:

我有一个包含这样的对象的集合:

{
  "_id": ObjectId("52ed12c144aecc4bf004d0b6"),
  "title": "myBook",
  "summary": "This is a book summary",
  "covers": [
    "http://url.com/cover1.jpg",
    "http://url.com/cover2.jpg",
  ],
  "urls": [
    "http://url.com/myBook",
    "http://url.com/myBook/option2"
  ],
  "genres": [
    "comedy",
    "romantic"
  ],
  "created_at": ISODate("2012-12-17T23:00:00Z"),
  "modify_at": ISODate("2014-02-01T15:41:48.149Z")
}

但我只想从 coversurls 属性中获取第一个值,我的输出 json 应该是这样的:

{
  "_id": ObjectId("52ed12c144aecc4bf004d0b6"),
  "title": "myBook",
  "summary": "This is a book summary",
  "covers": "http://url.com/cover1.jpg",
  "urls": "http://url.com/myBook"
  "genres": [
    "comedy",
    "romantic"
  ],
  "created_at": ISODate("2012-12-17T23:00:00Z"),
  "modify_at": ISODate("2014-02-01T15:41:48.149Z")
}

我想我必须使用 map_reduce,但我不确定我应该如何查询,我试过了:

db.books.mapReduce( function(){ emit(this._id, this.covers); }, function(key, values){ return values[0]; }, { out: "map_reduce_covers" } )

但这似乎行不通。

【问题讨论】:

    标签: mongodb mongoid


    【解决方案1】:

    您可以使用$slice 投影运算符来控制数组的哪些元素包含在输出中。

    db.books.findOne({}, {covers: {$slice: 1}, urls: {$slice: 1}})
    

    输出:

    {
      "_id": ObjectId("52ed12c144aecc4bf004d0b6"),
      "title": "myBook",
      "summary": "This is a book summary",
      "covers": [
        "http://url.com/cover1.jpg"
      ],
      "urls": [
        "http://url.com/myBook"
      ],
      "genres": [
        "comedy",
        "romantic"
      ],
      "created_at": ISODate("2012-12-17T17:00:00-0600"),
      "modify_at": ISODate("2014-02-01T09:41:48.149-0600")
    }
    

    coversurls 仍然是数组,如果您还想更改它,它会变得更加复杂。

    【讨论】:

      猜你喜欢
      • 2018-04-08
      • 2021-12-14
      • 2019-08-12
      • 1970-01-01
      • 2021-08-20
      • 2017-01-05
      • 2017-01-07
      • 2018-04-18
      • 1970-01-01
      相关资源
      最近更新 更多