首页 文章

在$ project阶段重塑文档

提问于
浏览
1

对于我们的集合,看起来像这样:

> db.companies.find().limit(1).pretty() {
  "_id": ObjectId("52cdef7c4bab8bd675297d8b"),
  "name": "AdventNet",
  "permalink": "abc3",
  "crunchbase_url": "http://www.crunchbase.com/company/adventnet",
  "homepage_url": "http://adventnet.com",
  "blog_url": "",
  "blog_feed_url": "",
  "twitter_username": "manageengine",
  "category_code": "enterprise",
  "number_of_employees": 600,
  "founded_year": 1996,
  "deadpooled_year": 2,
  "tag_list": "",
  "alias_list": "Zoho ManageEngine ",
  "email_address": "pr@adventnet.com",
  "phone_number": "925-924-9500",
  "description": "Server Management Software",
  "created_at": ISODate("2007-05-25T19:24:22Z"),
  "updated_at": "Wed Oct 31 18:26:09 UTC 2012",
  "overview": "<p>AdventNet is now <a href=\"/company/zoho-manageengine\"
 title=\"Zoho ManageEngine\" rel=\"nofollow\">Zoho ManageEngine</a>.</p>\n\n<p>F
ounded in 1996, AdventNet has served a diverse range of enterprise IT, networkin
g and telecom customers.</p>\n\n<p>AdventNet supplies server and network managem
ent software.</p>",
  "image": {
    "available_sizes": [
      [
        [
          150,
          55
        ],
        "assets/images/resized/0001/9732/19732v1-max-150
x150.png"
      ],
      [
        [
          150,
          55
        ],
        "assets/images/resized/0001/9732/19732v1-max-250
x250.png"
      ],
      [
        [
          150,
          55
        ],
        "assets/images/resized/0001/9732/19732v1-max-450
x450.png"
      ]
    ]
  },
  "products": [],
  "relationships": [{
    "is_past": true,
    "title": "CEO and Co-Founder",
    "person": {
      "first_name": "Sridhar",
      "last_name": "Vembu",
      "permalink": "sridhar-vembu"
    }
  }, {
    "is_past": true,
    "title": "VP of Business Dev",
    "person": {
      "first_name": "Neil",
      "last_name": "Butani",
      "permalink": "neil-butani"
    }
  }, {
    "is_past": true,
    "title": "Usabiliy Engineer",
    "person": {
      "first_name": "Bharath",
      "last_name": "Balasubramanian",
      "permalink": "bharath-balasibramanian"
    }
  }, {
    "is_past": true,
    "title": "Director of Engineering",
    "person": {
      "first_name": "Rajendran",
      "last_name": "Dandapani",
      "permalink": "rajendran-dandapani"
    }
  }, {
    "is_past": true,
    "title": "Market Analyst",
    "person": {
      "first_name": "Aravind",
      "last_name": "Natarajan",
      "permalink": "aravind-natarajan"
    }
  }, {
    "is_past": true,
    "title": "Director of Product Management",
    "person": {
      "first_name": "Hyther",
      "last_name": "Nizam",
      "permalink": "hyther-nizam"
    }
  }, {
    "is_past": true,
    "title": "Western Regional OEM Sales Manager",
    "person": {
      "first_name": "Ian",
      "last_name": "Wenig",
      "permalink": "ian-wenig"
    }
  }],
  "competitions": [],
  "providerships": [{
    "title": "DHFH",
    "is_past": true,
    "provider": {
      "name": "A Small Orange",
      "permalink": "a-small-orange"
    }
  }],
  "total_money_raised": "$0",
  "funding_rounds": [],
  "investments": [],
  "acquisition": null,
  "acquisitions": [],
  "offices": [{
    "description": "Headquarters",
    "address1": "4900 Hopyard Rd.",
    "address2": "Suite 310",
    "zip_code": "94588",
    "city": "Pleasanton",
    "state_code": "CA",
    "country_code": "USA",
    "latitude": 37.692934,
    "longitude": -121.904945
  }],
  "milestones": [],
  "video_embeds": [],
  "screenshots": [{
    "available_sizes": [
      [
        [
          150,
          94
        ],
        "assets/images/resized/0004/3400/43400v1
-max-150x150.png"
      ],
      [
        [
          250,
          156
        ],
        "assets/images/resized/0004/3400/43400v1
-max-250x250.png"
      ],
      [
        [
          450,
          282
        ],
        "assets/images/resized/0004/3400/43400v1
-max-450x450.png"
      ]
    ],
    "attribution": null
  }],
  "external_links": [],
  "partners": []
} >

对于我们的 node.js app的以下查询 .

db.companies.aggregate([{
  $match: {
    "name": "Facebook"
  },
$project: {
        "_id": 0,
        "name": 1,
        "people": "$relationships.person.last_name"
    }
}])

给出以下错误:

assert:命令失败:{“ok”:0,“errmsg”:“管道阶段规范对象必须包含完全字段 . ”,“代码”:16435}:聚合失败_getErrorWithCode @src / mongo / shell / utils .js:25:13 doassert@src/mongo/shell/assert.js:13:14 assert.commandWorked@src/mongo/shell/assert.js:267:5 DBCollection.prototype.aggregate@src/mongo/shell/ collection.js:1312:5 @(shell):1:1 2016-09-17T19:20:26.303 0530 E QUERY [thread1]错误:命令失败:{“ok”:0,“errmsg”:“管道阶段规范对象必须包含正确的字段 . “,”代码“:16435}:聚合失败:_getErrorWithCode@src/mongo/shell/utils.js:25:13 doassert@src/mongo/shell/assert.js:13: 14 assert.commandWorked@src/mongo/shell/assert.js:267:5 DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1312:5 @(shell):1:1

我无法弄清楚为什么?

1 回答

  • 1

    您缺少聚合管道运算符的一些大括号 . 正确的管道应该是:

    db.companies.aggregate([
        { "$match": {  "name": "Facebook" } }, /* match pipeline stage */
        { "$project": { /* project pipeline stage */
            "_id": 0,
            "name": 1,
            "people": "$relationships.person.last_name"
        } }
    ])
    

相关问题