2017-05-31 158 views
0

当我试图加入mongo数据库$ $查找返回空数组。

我有两个集合一个是user_information,另一个是add_to_cart.In。我想在user_information中使用user_id获取用户表单add_to_cart集合的add_to_cart细节。

add_to_cart集合:

[ 
    { 
    "_id": { 
     "$id": "592ec12b744a12d014000031" 
    }, 
    "order_id": "592ec125744a12d014000030", 
    "table_id": 1, 
    "category_name": "veg", 
    "food_id": "5923c8bc744a12441e000031", 
    "user_id": "592ec125744a12d01400002f", 
    "food_name": "Cream Of Mushroom Soup", 
    "food_per_price": "100", 
    "food_total_price": 100, 
    "food_qty": 1, 
    "active_status": 0, 
    "created_at": { 
     "sec": 1496236331, 
     "usec": 0 
    }, 
    "updated_at": { 
     "sec": 1496236331, 
     "usec": 0 
    } 
    }, 
    { 
    "_id": { 
     "$id": "592ec12e744a12d014000032" 
    }, 
    "order_id": "592ec125744a12d014000030", 
    "table_id": 1, 
    "category_name": "veg", 
    "food_id": "5923c8cb744a12441e000033", 
    "user_id": "592ec125744a12d01400002f", 
    "food_name": "Cream Of Mushroom Soup", 
    "food_per_price": "100", 
    "food_total_price": 100, 
    "food_qty": 1, 
    "active_status": 0, 
    "created_at": { 
     "sec": 1496236334, 
     "usec": 0 
    }, 
    "updated_at": { 
     "sec": 1496236334, 
     "usec": 0 
    } 
    } 
] 

user_information集合:

[ 
    { 
    "_id": { 
     "$id": "592ec125744a12d01400002f" 
    }, 
    "branch_id": 1, 
    "brand_id": 1, 
    "business_id": 1, 
    "table_id": 1, 
    "uid": "116907438816775509716", 
    "user_name": "dhamo dharan", 
    "user_email": "[email protected]", 
    "user_provider": "google", 
    "user_image": "https://lh5.googleusercontent.com/-Masl6FTlG_g/AAAAAAAAAAI/AAAAAAAAAEo/UV3oTjMnqzQ/s96-c/photo.jpg", 
    "active_status": 0, 
    "created_at": { 
     "sec": 1496236325, 
     "usec": 0 
    }, 
    "updated_at": { 
     "sec": 1496236325, 
     "usec": 0 
    } 
    } 
] 

我的数据库查询

db.add_to_cart.aggregate([ 
    { "$match": { "user_id": "592ec125744a12d01400002f" } }, 
    { "$sort": { "created_at": -1 } }, 
    { "$limit": 20 }, 
    { "$lookup": { 
    "from": "user_information", 
    "localField": "user_id", 
    "foreignField": "_id", 
    "as": "userinfo" 
    } }, 
    { "$unwind": "$userinfo" }, 
    { "$project": { 
    "food_name": 1, 
    "food_qty": 1, 
    "userinfo.user_name": 1, 
    "userinfo.user_email": 1 
    } } 
]) 

它将返回空的结果,我不知道哪里出了wrong.Thanks在提前!

+0

因为' “user_ID的”: “592ec125744a12d01400002f”'是 ​​“串” 和' “_id”:{“$ ID “:”592ec125744a12d01400002f“}”是真实的y'ObjectId',虽然是Java驱动程序在控制台输出中执行的方式。这两种类型**不匹配**。根本原因是''user_id''应该被存储为'ObjectId',但是你的应用程序代码做错了。 –

+0

感谢它将id更改为对象后正在工作! –

+0

如果在查询本身中存在任何将id转换为objectId的方法 –

回答

0

简单的话 - 你的匹配查询是错误的。

因为“user_ID的”:“592ec125744a12d01400002f”是“字符串”,匹配正常工作与字符串的ObjectId

但是当我们谈论总,您能不能给直接串正常查找查询..你总是给mongoose.Types.ObjectId(用户ID),其中userid是字符串

var userId="592ec125744a12d01400002f"; 


db.add_to_cart.aggregate([ 
{ "$match": { "user_id": mongoose.Types.ObjectId(userId) } }, 
{ "$sort": { "created_at": -1 } }, 
{ "$limit": 20 }, 
{ "$lookup": { 
"from": "user_information", 
"localField": "user_id", 
"foreignField": "_id", 
"as": "userinfo" 
} }, 
{ "$unwind": "$userinfo" }, 
{ "$project": { 
"food_name": 1, 
"food_qty": 1, 
"userinfo.user_name": 1, 
"userinfo.user_email": 1 
} } 
])