我有一个名为Feed的mongodb集合,它有一个名为“type”的属性。根据该字符串,我想用json发送一个可更改的字段。例如,如果type是“photo”,我想做那样的事情
schema.find({number: "123456"},"body number",
function(err, data) {
但如果字符串是故事,而不是照片;在相同的'schema.find'查询中,它应该创建一个带有“body url”而不是“body number”的json。他们都应该和同一个json一起传递。
res.json(data);
一个明显的例子,我希望我的json是这样的。因为你的字段根据“类型”改变。但它们实际上都在同一个系列中。
[
{
type: 'photo',
number: 123456,
url: 'asd.jpg',
},
{
type: 'story',
body: 'hello',
number: 123456,
}
]
答案 0 :(得分:0)
所以基本上你想要从Feed集合中返回某些文档字段,这些字段在变量中指定,例如, "firstName pic points photos"
。
是否有包含story
字段的Feed文档?
Model.find()不会创建任何架构。
也许可以使用更多代码进行编辑,以便我们了解命令。
答案 1 :(得分:0)
对于像这样的特定于文档的JSON格式,您可以覆盖toJSON
模型的默认Feed
方法,如this gist所示。
<强>更新强>
如果您希望在文档中具有这种灵活性,那么它就更容易了。只需定义您的架构以包含所有可能的字段,然后只设置适用于其type
的给定文档的字段。您不使用的字段不会出现在文档中(或JSON响应中)。所以你的架构看起来像:
var feedSchema = new Schema({
type: { type: 'String' },
venue: Number,
url: String,
body: String
});
答案 2 :(得分:0)
看看mongoose-schema-extend。使用'Discriminator Key'功能,您可以指示.find()在每个案例中创建正确的模型。
您的代码应如下所示(未经测试):
var feedSchema = new Schema({
venue: Number,
}, {discriminatorKey : 'type' }});
var photoSchema = feedSchema.extend({
url: String
});
var storySchema = feedSchema.extend({
body: String
});
var Feed= mongoose.model('feed', feedSchema );
var Photo= mongoose.model('photo', photoSchema );
var Story= mongoose.model('story', storySchema );
//'photo' and 'story' will be the values for 'type' key
Feed.find({venue: "123456"}, function(err, models) {
console.log(models[0] instanceof Photo); // true
console.log(models[0] instanceof Story); // false
console.log(models[1] instanceof Photo); // false
console.log(models[1] instanceof Story); // true
});