- 
    Type:New Feature 
- 
    Resolution: Duplicate
- 
    Priority:Major - P3 
- 
    None
- 
    Affects Version/s: None
- 
    Component/s: Aggregation Framework
- 
    None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
A $findOne operator should be useful when data must be compiled from multiple collections.
This is not like a "Collection JOIN Collection".
It is more towards "From this document LOOKUP that document".
	$findOne: {Options, Criteria, Projection}
Options is
{Collection:"name", Database:"db"}Criteria and Projection will be similar to db.collection.findOne() method.
Take following sales order document for example:
db.sales.findOne()
	{
		"_id" : 1,
		"refcd" : "S1",
		"date" : ISODate("2010-11-26T11:18:16.463Z"),
		"cust" : {
				"cid" : 10,
				"doc" : "customer"
		},
		"lineitem" : [
				{
						"rowid" : 1,
						"prod" : {
								"pid" : 20,
								"unitprice" : 41.37,
								"doc" : "product"
						},
						"qty" : 26,
						"linetotal" : 1075.62
				}
		],
		"amount" : 1075.62
	}
To get the details from customer & product details for this document:
	db.sales.aggregate([
	{ $project: 
			{
				"_id":1,
				"refcd":1,
				"date":1,
				"cust.cid":1,
				"cust.doc":1,
				"cust.ref":{$let: {vars:{}, in:{$findOne:{
														{Collection:"$cust.doc"},
														{"_id":"$cust.cid"},
														{"_id":0}
														}
												}
								} 
						},
				"lineitem":1,
				"lineitem_ref": {$map: { input: "$lineitem",
										as: "li",
										in: {$findOne:{
														{Collection:"$$li.prod.doc"},
														{"_id":"$$li.prod.pid"},
														{"_id":0}
														}
											}
									}
								},
				"amount":1
			}
	}
	])
- duplicates
- 
                    SERVER-19095 $lookup -         
- Closed
 
-