在$ project阶段中重塑文档

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

> 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应用程序。

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

给出以下错误:

assert:command failed:{“ok”:0,“errmsg”:“一个stream水线阶段指定对象必须包含完全的字段。”,“code”: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”:“stream水线阶段指定对象必须完全包含字段。 :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

我无法弄清楚为什么?

你错过了你的聚合pipe道操作符的一些大括号。 正确的pipe道应该是:

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