2

我有一个名为 Feed 的 mongodb 集合,它有一个名为“type”的属性。根据那个字符串,我想用 json 发送一个可变字段。例如,如果类型是“照片”,我想做这样的事情

 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,

    }
]
4

3 回答 3

0

因此,基本上您希望从 Feed 集合中返回某些文档字段,这些字段在诸如 eg 的变量中指定"firstName pic points photos"

是否有带有该story字段的 Feed 文档?

Model.find()不创建任何模式。

也许用进一步的代码进行编辑,以便我们可以理解该命令。

于 2012-09-26T14:55:57.190 回答
0

看看mongoose-schema-extend。使用“鉴别器键”功能,您可以指示 .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
});
于 2012-09-26T17:54:56.540 回答
0

对于像这样的特定于文档的 JSON 格式,您可以覆盖模型的默认toJSON方法,Feed本要点所示。

更新

如果您希望文档具有这种灵活性,那就更容易了。只需定义您的架构以包含所有可能的字段,然后仅设置适用于给定文档的字段type。您不使用的字段不会出现在文档中(或 JSON 响应中)。所以你的架构看起来像:

var feedSchema = new Schema({
    type: { type: 'String' },
    venue: Number,
    url: String,
    body: String
});
于 2012-09-26T16:12:57.257 回答