模型没有返回预期的内容

时间:2015-06-29 22:22:17

标签: node.js mongodb mongoose

我有2个猫鼬模特/模式(产品和商人)。在产品上执行.find()时,它会按预期返回所有产品,但是当它为Merchants执行时,它会返回所有内容(商家和产品数据),而它应该根据定义的架构返回商家。我的mongoDB服务器上有一个集合,其中包含我的所有商家和产品。

知道我缺少什么吗?

由于

商家模式

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var MerchantShema = new Schema({
  merchants: [{
    merchant_id: Number,
    price_current: Number,
    price_rrp: Number,
    aff_link: String,
    merchant_product_id: Number,
    aw_image_url: String,
    cost_scoop: String,
    created_at: Date,
    updated_at: Date
  }]
});

module.exports = mongoose.model('Merchants', MerchantShema, 'products');

产品型号

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var ProductSchema = new Schema({
  ean: Number,
  aw_product_id: Number,
  product_name: String,
  product_brand: String,
  product_description: String,
  img_sml: String,
  img_lrg: String,
  cat: String,
  sub_cat: String,
  weight: String,
  rating: String,
  created_at: Date,
  updated_at: Date,
  merchants: [{
    merchant_id: Number,
    price_current: Number,
    price_rrp: Number,
    aff_link: String,
    merchant_product_id: Number,
    aw_image_url: String,
    cost_scoop: String,
    created_at: Date,
    updated_at: Date
  }],
  nutrition: [{
    calories: Number,
    protein: Number,
    fat: Number,
    sat_fat: Number,
    carbs: Number,
    sugar: Number,
    salt: Number,
    calories: Number
  }],
  ingredients: String,
  flavours: String,
  is_active: Boolean
});

module.exports = mongoose.model('Products', ProductSchema, 'products');

我的路线

  app.get('/api/products', function(req, res) {
    Products.find(function(err, products){
        if (err) return console.error(err);
        return res.send(products);
    })
    .where('is_active').equals('true')
  });

  app.get('/api/merchants', function(req, res){
    Merchants.find(function(err, merchants){
      if (err) return console.error(err);
      return res.send(merchants);
    });
  });

我的收藏示例

[
    {
        "_id": "55840f86e4b0ba19c15ee26d",
        "merchant_id": "1111",
        "merchant_aw_id": "1",
        "merchant_name": "test merchant",
        "merchant_url": "google.com",
        "merchant_image": "",
        "created_at": "",
        "updated_at": "",
        "merchants": []
    },
    {
        "_id": "558426f9e4b0ba19c15ee495",
        "ean": "123456789",
        "aw_product_id": "55555",
        "product_name": "Test Product",
        "product_brand": "Test Brand",
        "product_description": "This is a description for the test product",
        "img_sml": "http://images.productserve.com/preview/6/3196/73/20/704322073.jpg",
        "img_lrg": "http://images.productserve.com/preview/6/3196/73/20/704322073.jpg",
        "cat": "Protein",
        "sub_cat": "Protein",
        "weight": "2.5kg",
        "rating": "5",
        "created_at": "",
        "updated_at": "",
        "nutrition": [
            {
                "salt": "1",
                "sugar": "1",
                "carbs": "1",
                "sat_fat": "1",
                "fat": "1",
                "protein": "1",
                "calories": "1"
            }
        ],
        "ingredients": "",
        "flavours": "",
        "is_active": "true",
        "merchants": [
            {
                "merchant_id": 1111,
                "price_current": 9.99,
                "price_rrp": 15.99,
                "aff_link": "google.com",
                "merchant_product_id": 999,
                "aw_image_url": "",
                "cost_scoop": "43p",
                "created_at": "",
                "updated_at": ""
            }
        ]
    },
    {
        "ean": "123456789",
        "aw_product_id": "55555",
        "product_name": "Test Product",
        "product_brand": "Test Brand",
        "product_description": "This is a description for the test product",
        "img_sml": "http://images.productserve.com/preview/6/3196/73/20/704322073.jpg",
        "img_lrg": "http://images.productserve.com/preview/6/3196/73/20/704322073.jpg",
        "cat": "Protein",
        "sub_cat": "Protein",
        "weight": "2.5kg",
        "created_at": "",
        "updated_at": "",
        "nutrition": [
            {
                "salt": "1",
                "sugar": "1",
                "carbs": "1",
                "sat_fat": "1",
                "fat": "1",
                "protein": "1",
                "calories": "1"
            }
        ],
        "ingredients": "",
        "flavours": "",
        "is_active": "true",
        "merchants": [
            {
                "merchant_id": 1111,
                "price_current": 9.99,
                "price_rrp": 15.99,
                "aff_link": "google.com",
                "merchant_product_id": 999,
                "aw_image_url": "",
                "cost_scoop": "43p",
                "rating": "5",
                "created_at": "",
                "updated_at": ""
            }
        ]
    }
]

1 个答案:

答案 0 :(得分:1)

查看商家模型定义。您在导出中呼叫产品:

module.exports = mongoose.model('Merchants', MerchantShema, 'products');

这应该是

module.exports = mongoose.model('Merchants', MerchantShema, 'merchants');

我注意到的另一件事是你有两个叫做“卡路里”的钥匙。

我运行了代码,它现在正确地带回了商家。但是,当您调用产品时,它会将商家作为该架构的一部分返回,因为商家已包含在产品中。另一种方法是使用嵌套模式。您可以阅读其他帖子中的内容:Mongoose subdocuments vs nested schema

希望有所帮助。