我见过几个与此相关的问题。但无法找到可以帮助我的答案。
这是我使用mongoose的服务器端node.js代码。此代码只是在控制台中打印“成功获取数据[]”。
var kmphDBSchema = commonRouter.kmphDBSchema;
var locationSchema = new kmphDBSchema({result:{locations:{id:String,parent_id:String,countryCode:String,name:String}}});
var locationModel = commonRouter.kmphMongoClient.model('mgh_locations',locationSchema);
exports.getLocations = function(request, response) {
var locationName = '/.*' + request.params.locationName + '.*/';
console.log("locationName: " + locationName);
locationModel.aggregate(
[
{ $unwind:"$locations"}
,{ $project:{_id:0,locations:1} }
,{ $match:{"locations.name": locationName}}
]
, function (err, res) {
console.log('Error=' + err);
if (err){
console.log('Error in fetching locations' + err);
return (err);
}
console.log('Success in fetching data' + JSON.stringify(res));
response.send(JSON.stringify(res));
});
}
以下是mongo shell中查询返回的数据。 使用mongoose从node.js获取数据时,不会返回此数据。
/* 0 */
{
"result" : [
{
"locations" : {
"id" : "1",
"parent_id" : "531",
"countryCode" : "IN",
"name" : "Noida"
}
},
{
"locations" : {
"id" : "407",
"parent_id" : "531",
"countryCode" : "IN",
"name" : "Greater Noida"
}
}
],
"ok" : 1
}.
这是原始的JSON文档
/* 0 */
{
"_id" : ObjectId("548b15d700dcf350ea6a9e1e"),
"locations" : [
{
"id" : "1",
"parent_id" : "531",
"countryCode" : "IN",
"name" : "Noida"
},
{
"id" : "2",
"parent_id" : "531",
"countryCode" : "IN",
"name" : "New Delhi"
},
{
"id" : "3",
"parent_id" : "531",
"countryCode" : "IN",
"name" : "Gurgaon"
},
{
"id" : "11",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Agra"
},
{
"id" : "12",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Jaipur"
},
{
"id" : "13",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Hyderabad"
},
{
"id" : "14",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Lucknow"
},
{
"id" : "15",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Kanpur"
},
{
"id" : "16",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Lansdowne"
},
{
"id" : "18",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Bangalore"
},
{
"id" : "19",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Nainital"
},
{
"id" : "20",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Bhimtal"
},
{
"id" : "21",
"parent_id" : "0",
"countryCode" : "IN",
"name" : "Kolkata"
}
]
}
答案 0 :(得分:0)
当这是一个匹配的搜索词时,或许可以为其他人提供更多说明。
作为ODM或(对象文档映射器)接口,Mongoose库在其功能中具有某些方面,可能会使不谨慎的人感到困惑。最常见的方面显然是"命名"模特Mongoose遵循一种模式,该模式使用模型名称作为" Object"的表示。在"复数"形式何时命名"默认情况下的集合。这会导致一些问题。
这里使用的库会导致一些常见的变形。因此,使用以下示例:
var mongoose = require("mongoose"),
Schema = mongoose.Schema;
var personSchema = new Schema({
"name": String,
"tile": STring
});
mongoose.model( "Person", personShema );
期待"模型"在集合存储中应该称为people
。这是使用的库赋予的标准EN
或英语语言变形。但是有一个"默认"处理这种情况存在于猫鼬图书馆本身采用的基本方法中。由于该功能实际上接受了"三个"参数,"第三"与集合名称明确匹配,而不是默认"复数"。
mongoose.model( "Person", personSchema, "Person" );
现在collection
实际上被命名为Person
而不是People
,因此更像是您所期望的。
Fair3注意到"默认"行动正是良好编程实践所期望的。 "模型"这是一个"单数"类表示,"集合"底层代表"很多"这些"对象"在一个集合中,基本上是隐含的。所以这是正确的做法。
如果您正在使用"型号"到已经定义了它的结构"集合"名称,然后使用"第三"在实例化对象时指定该名称的参数。这使得引擎清楚并且还可以读取代码。