Mongoose populate()返回对象数组而不是单个对象

时间:2014-02-22 19:25:41

标签: javascript node.js mongodb orm mongoose

我有一个集合,它有一个引用另一个集合的objectId的属性。

placeSchema = mongoose.Schema({
    name: String,
    category: [{ type: Schema.Types.ObjectId, ref: 'categories' }],
    facilities: [{ type: Schema.Types.ObjectId, ref: 'facilities' }],
});

category ref是categories集合的objectId。 facilities ref是facilities集合的objectId数组。

当我填充属性时,facilities变为facilities对象的数组,但category也变为一个category的数组。

Place.find(query).populate('category').populate('facilities').limit(limit).skip(offset).exec(function(err, data){
    if (err) return handleError(err);
    res.json(data);
});

以下是上述查询的示例:

{
    "_id": "52ff59be70e8f0dfc8358cb4",
    "address": {
        "address_1": "Chambers Street",
        "city": "Edinburgh",
        "postcode": "EH1 1JF"
    },
    "description": "The National Museum of Scotland brings together our rich Scottish heritage with exciting international collections.",
    "loc": {
        "lon": -3.188384,
        "lat": 55.94772
    },
    "name": "National Museum of Scotland",
    "facilities": [
        {
            "_id": "53012d5b65b5e9a35efbb214",
            "name": "Facility One"
        },
        {
            "_id": "53012d6965b5e9a35efbb215",
            "name": "Facility Two"
        }
    ],
    "category": [
        {
            "_id": "52ffbf33605d0c81f36d98e0",
            "name": "Museums",
            "slug": "museums"
        }
    ]
}

以下是Mongo中的文档:

{
    "_id" : ObjectId("52ff59be70e8f0dfc8358cb4"),
    "address" : {
        "address_1" : "Chambers Street",
        "city" : "Edinburgh",
        "postcode" : "EH1 1JF"
    },
    "category" : ObjectId("52ffbf33605d0c81f36d98e0"),
    "description" : "The National Museum of Scotland brings together our rich Scottish heritage with exciting international collections.",
    "facilities" : [
        ObjectId("53012d5b65b5e9a35efbb214"),
        ObjectId("53012d6965b5e9a35efbb215")
    ],
    "loc" : {
        "lon" : -3.188384,
        "lat" : 55.94772
    },
    "name" : "National Museum of Scotland"
}

如何填充单个category引用而不是数组?

1 个答案:

答案 0 :(得分:1)

这是有道理的,因为您在模式定义中已将类别字段声明为数组:

category: [{ type: Schema.Types.ObjectId, ref: 'categories' }]

以下内容应该不会将其放入数组中(删除[]):

category: { type: Schema.Types.ObjectId, ref: 'categories' }

假设您确实只想要一个类别。