model.find({})。populate(' place')。populate(' location')不返回地点和位置

时间:2017-02-06 13:09:43

标签: javascript node.js mongodb mongoose

我在MongoDb上有以下结构的文档,

enter image description here

我在节点应用程序中使用Mongoose version ^4.8.1 。我为上面的文档创建了3个模式模型,如下所示,

Event.js

var mongoose = require('mongoose');
var eventSchema = new mongoose.Schema({
    description: {
        type: String        
    },
    end_time: {
        type: Date      
    },
    start_time: {
        type: Date      
    },
    name: {
        type: String    
    },
    place: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'place'
    }
});
eventSchema.index({name: 'text'},{'place.location.country':"text"});
var Event = mongoose.model('events', eventSchema);
module.exports= Event;

Place.js

var mongoose = require('mongoose');
var placeSchema = new mongoose.Schema({
    name: {
        type: String    
    },
    location: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'location'
    }
});

var Place = mongoose.model('place', placeSchema);
module.exports= Place;

Location.js

var mongoose = require('mongoose');
var locationSchema = new mongoose.Schema({
    city: {
        type: String        
    },
    latitude: {
        type: String        
    },
    country: {
        type: String        
    },
    located_in: {
        type: String        
    },
    state: {
        type: String        
    },
    street: {
        type: String        
    },
    zip: {
        type: String        
    },


});
var Location = mongoose.model('location', locationSchema);
module.exports= Location;

访问/查询数据库的公共处理程序,

dbHandler.js

querandpoplulate : function(model,condition,options)
    {
        return new Promise(function(resolve, reject) {
            options = options||{};
            console.log("model is" + model);
            model.find({}).populate('place').populate('location').exec(function(error, data) {
                if (error)
                    console.log(error);
                    reject(error);        
               console.log(data);
                resolve(data);
            })
        })

    }

以下是我的查询方式,

dbHelper.querandpoplulate(mongoose.model('events'), {$text: {$search: searchString},'place.location.country': countryString},function(error,data){
                            callback(data);       
});

问题:它不会返回带有位置和位置的结果集,它会在原位字段中返回null。

1 个答案:

答案 0 :(得分:1)

我认为您的文档保存为embedded documents,但不是referenced documents

要获取此类文档,您无需执行任何population。简单的find查询应该适合您。

试试这个:

model.find({}).exec(function(error, data) {
    if (error)
        console.log(error);
        reject(error);        
   console.log(data);
    resolve(data);
})

由于您未将data保存在mongoDB中,而只是检索它。您需要定义与schema结构匹配的document

正如您所讨论的,我认为您需要更改Schema,并将所有3 schemas合并到一个文件中( Event.js )。

var mongoose = require('mongoose');
var locationSchema = new mongoose.Schema({
    city: {
        type: String        
    },
    //add other fields here 
});

var placeSchema = new mongoose.Schema({
    name: {
        type: String    
    },
    location: locationSchema
});

var eventSchema = new mongoose.Schema({
    description: {
        type: String        
    },
    //add other fields here too
    place: placeSchema
});
eventSchema.index({name: 'text'},{'place.location.country':"text"});
var Event = mongoose.model('events', eventSchema);
module.exports= Event;