在mongoose中使用某些条件查找时获取空数组

时间:2015-09-01 06:42:32

标签: node.js mongodb mongoose

架构:

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等于某个值,但每当我使用任何条件查找数据时,我都会获得空数组,而如果我删除条件并找到所有数据,那么我会得到数据,这是为什么?

1 个答案:

答案 0 :(得分:1)

我认为,您尝试在ObjectId Field上查找带有请求的mongoDB文档,但在您的示例中,您不使用正确的ObjectId字符串值。

  

ObjectId是一个12字节的BSON类型,使用:

构造

因此,这是使用正确的ObjectId请求serviceAbility的正确方法:

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

在这种情况下,您应该agentProfile _id等于507f1f77bcf86cd799439011