In mongodb it is highly recommended to embed the document as much as possible, especially in your case when you have a 1 to 1 relationship.
Why? you cannot use Atom-join-operations (even this is not your main problem) in your requests (not the main reason). But the best reason is every association (theoretically) that requires a hard search, which takes about 20 ms. only one distortion is required to embed your sub-document.
I believe that the best db scheme for you uses only an identifier for all of your entities.
{ _id : ObjectId("547d5c1b1e42bd0423a75781"), userInfo : { "name" : "john", "email" : " test@localhost.com ", "phone" : "01022223333", }, customerInfo : { "birthday" : "1983-06-28", "zipcode" : "12345", "address" : "1, Main Street", }, staffInfo : { ........ } }
Now, if you just want userinfo , you can use
db.users.findOne({_id : ObjectId("547d5c1b1e42bd0423a75781")},{userInfo : 1}).userInfo;
it will only give you userInfo :
{ "name" : "john", "email" : " test@localhost.com ", "phone" : "01022223333" }
And if you just want to use ** customerInfo **, you can use
db.users.findOne({_id : ObjectId("547d5c1b1e42bd0423a75781")},{customerInfo : 1}).customerInfo;
it will only give you customerInfo :
{ "birthday" : "1983-06-28", "zipcode" : "12345", "address" : "1, Main Street" }
etc.
This circuit has a minimal difficult circuit and in fact you are using the mongodb document-based function with the maximum performance you can achieve.