1
votes

For our collection which looks like this:

> 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": "[email protected]",
  "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": []
} >

For the below query for our node.js app.

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

Gives the following error:

assert: command failed: { "ok" : 0, "errmsg" : "A pipeline stage specification object must contain exactly o ne field.", "code" : 16435 } : aggregate failed _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] Error: command failed: { "ok" : 0, "errmsg" : "A pipeline stage specification object must contain exactly o ne field.", "code" : 16435 } : aggregate failed : _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

I'm unable to figure out why?

1

1 Answers

1
votes

You are missing some braces for your aggregation pipeline operators. The correct pipeline should be:

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