注意 :我问了这个问题here,但当时我纯粹是用MongoDB
工作,现在我是试图用Mongoose
实现这一点。我认为提出一个单独的问题是合适的,因为我相信答案会有根本的不同,但如果我在该决定中不正确,请告诉我。
我有一个具有以下格式的集合:
[
{
firstname: 'Joe',
lastname: 'Blow',
emails: [
{
email: 'test@example.com',
valid: false
},
{
email: 'test2@example.com',
valid: false
}
],
password: 'abc123',
_id: 57017e173915101e0ad5d94a
},
{
firstname: 'Johnny',
lastname: 'Doe',
emails: [
{
email: 'test3@example.com',
valid: false
}
],
password: 'abc123',
_id: 57017e173915101e0ad5d87b
},
]
我正在尝试根据emails.email
字段找到用户。以下是我到目前为止的情况:
UserModel.find()
.where('emails')
.elemMatch(function (elem) {
elem.where('email').equals(userEmail);
})
.limit(1)
.exec(
(err, usersReturned) => {
console.log('test2@example.com');
});
我做错了什么?我是Mongoose
的新手,似乎无法解决这个问题。
答案 0 :(得分:5)
你可以这样做:
UserModel.find({"emails.email": userEmail}).limit(1).exec(function(err, user){
if(err) console.log("Error: " + JSON.stringify(err));
else if(user) console.log("User Returned is : " + JSON.stringify(user));
});
答案 1 :(得分:0)
您可以在aggregate
字段上使用Mongodb $unwind
函数。使用"emails.email"
,它会将数组make作为独立文档分开。
UserModel.aggregate( [
{ $unwind : "$emails" },
{ $match: {$emails.email:"email you want to put"}}
],function(err,result){
//write code but you want to do
});