2015-09-01 38 views
1

模式:葛亭空數組時的一些標準,貓鼬發現

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var Config = require('../Config'); 

var serviceAvailability = new Schema({ 
    agentId: {type: Schema.ObjectId, ref: 'agentProfile', required: true}, 
    availabilityDate: {type: Date, required: true}, 
    availabilityTime: {type: Array, required: true} 
}); 

serviceAvailability.index({agentId:1 , availabilityDate:1},{unique:true}); 

module.exports = mongoose.model('serviceAvailability', serviceAvailability); 

控制器:

Models.serviceAvailability.find({'agentId':'abcd'}, function (err, service) { 
    console.log(service); 
    if(service) { 
     callback(err , service); 
    } 
    else { 
     callback(err); 
    } 
}); 

我試圖得到一些條件的所有數據一樣,如果的agentId等於某個值,但每當我使用任何標準來查找數據時,我會得到空數組,而如果我刪除條件並查找所有數據,那麼我正在獲取數據,爲什麼會這樣呢?

+0

你檢查如果'Models.agentProfile.findByI d('abcd')'產生一個結果? – robertklep

+2

那麼「abcd」不是'ObjectId'。您需要輸入一個有效的ObjectId值或至少等於返回的十六進制值的字符串。或者你似乎試圖匹配「agentProfile」對象中的「字段」,而後者是不可能的。不是沒有填充和手動過濾。 –

+0

abcd只是告訴你一個例子,在實際我發送適當的ObjectId, 和是的,我試着在mongo終端的所有相同的查詢,然後從mongo終端工作正常@robertklep –

回答

1

我想,你嘗試在ObjectId字段上找到一個帶有請求的mongoDB文檔,但是在你的例子中,你並沒有使用正確的ObjectId字符串值。

的ObjectId是一個12字節的BSON類型,構造使用:

所以,這是一個正確的ObjectId請求您的適用性以正確的方式:

Models.serviceAvailability.find({ 
    'agentId':'507f1f77bcf86cd799439011' 
}, function (err, service) { 
    if (err) { 
     callback(err); 
     return; 
    } 
    callback(null, service); 
}); 

在這種情況下, ,你應該有一個agentProfile_id等於507f1f77bcf86cd799439011

+1

我認爲在問題中'abcd'是隻是一個佔位符:-) – robertklep

+0

abcd只是告訴你一個例子,在實際中我發送適當的ObjectId –