2016-10-17 3 views
1

Я огляделся и попробовал все виды документов, чтобы получить предложение $where в MongoDB, чтобы работать на меня, но это просто не сработает.

Вот мой объект:

var UserProfiles = [{ 
userProfileID: "3f8c553c-3633-4fe9-a007-4346a783450c", 
firstName: 'Austin', 
lastName: 'Hunter', 
email: 'ahunter8....com', 
token: '', 
platform: '', 
password: 'admin', 
companyProfileID: "86660a5b-7f61-4238-889d-1cc3087947b9", 
authentication: '' 

} ....

есть несколько "профили", вставленные в UserProfiles Object. Это только первый.

Здесь я вставляя в коллекции:

MongoClient.connect(url, function(err, db) { 
    if (err) { 
     console.log(err); 
    } else { 
     console.log("We are connected"); 
    } 

    var collection = db.collection('UserProfile'); 

    for (var i = 0; i < UserProfiles.length; i++) { 
     collection.insert(UserProfiles[i], function(err, result) { 
      if (err) { 
       console.log(err); 
      } else { 
       console.log(result); 
      } 
     }); 
    } 
    db.close(); 
}); 

Сейчас я пытаюсь найти свою коллекцию сдавший в электронной почте и companyProfileID. Если оба они совпадают, верните этот профиль. Я думал, что предложение $where будет лучше, но я не могу заставить его работать.

Здесь я пытаюсь найти():

function getUserProfile(passInEmail, companyID, callback) { 
    MongoClient.connect(url, function(err, db) { 
     if (err) { 
      console.log(err); 
     } else { 
      console.log("We are connected"); 
     } 
     var collection = db.collection('UserProfile'); 
     collection.find({$where: "this.email == passInEmail"}, function(err, result) { 
      if (err) { 
       console.log(err); 
       callback(err); 
      } else if (result.length) { 
       console.log(result); 
       callback(result); 
      } else { 
       callback(err); 
       console.log("No document found"); 
      } 
     }); 
     db.close(); 
    }); 
    } 

Я пытаюсь найти коллекцию и если объект электронной почты соответствует переданному в электронной почте и объект companyProfileID соответствует переданному в CompanyID тогда успех.

+1

должен быть 'this.email == 'passInEmail'' или' this.email.indexOf (' passInEmail ') == 0' – gianlucatursi

+0

Хорошо. MongoClient найти верните курсор, чем вы можете цитировать с объектом, возвращаемым 'collection.find ({$ where:" this.email == passInEmail "})' ИЛИ вы можете использовать toArray: 'collection.find ({$ where:" this.email == passInEmail "}). toArray (function() {})' – gianlucatursi

+0

По-прежнему документ не найден. Я получил ошибку «Не могу прочитать свойство» indexOf «неопределенной» ошибки. –

ответ

3

Статья $where в вашем случае не в лучшем случае.
Вы должны сделать просто:

//userIdParam ad emailParam are two variables 
collection.find({userProfileID: userIdParam, email: emailParam}) 
    .toArray(function(err, result) { 
     if (err) { 
      console.log(err); 
      callback(err); 
     } else if (result.length) { 
      console.log(result); 
      callback(result); 
     } else { 
      callback(err); 
      console.log("No document found"); 
     } 
    }); 

Взгляните на документ here

+0

Благодарим за решение проблемы. Будет ли этот метод удостовериться, что userProfileID и email совпадают с элементом? –

+0

Да, конечно! каждый ключ в json-запросе находится в AND. Если вы хотите сделать это, например, OR, вы должны написать что-то вроде '{query1: 'query1', query_or: {$ или: ['first', 'second']}}', и результатом будет 'query1 == ' query1 '&& (query_or ==' first '|| query_or ==' second) ' – gianlucatursi

+1

Спасибо за помощь. Он работает отлично. Отличная работа. Очень ценим! –

Смежные вопросы