如何通过属性和数组项查询mongoose

时间:2013-05-11 12:19:32

标签: arrays node.js mongodb mongoose

我有一个像这样的猫鼬模型:

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

var PictureSchema = new Schema({
    listId: { type: Array, required: true },
    thumb: { type: String, required: true },
    large: { type: String, required: true }
});

var Picture = module.exports = mongoose.model('Picture', PictureSchema);

我试图通过“listId”属性查找图片来更新路由器中此模型的实例。像这样:

app.put('/pictures/append', function(req, res) {
  var targetListId = req.body.targetListId
    , currentListId = req.body.currentListId;

  Picture
    .find({ listId: currentListId }, function (err, picture) {
      console.log('found pic', picture);
      picture.listId.push(targetListId);
      picture.save(function(err, pic) {
        console.log('pic SAVED', pic);
      });
    });
});

“currentListId”是一个字符串,listId是currentListId的数组。也许这不是查询属性数组的正确方法? 我收到一个错误:

TypeError: Cannot call method 'push' of undefined

在线:

picture.listId.push(targetListId);

但是当我在mongo中查找图片模型时,他们会有listId数组,而一些DO包含我用于查询的项目“currentListId”。

我尝试使用$ elemMatch和$ in但我不知道我是否正确使用它们。 如果我只是写错了我的查询,不知道吗?

1 个答案:

答案 0 :(得分:0)

在架构中指定Array类型字段等同于Mixed,它告诉Mongoose该字段可以包含任何内容。相反,将您的架构更改为以下内容:

var PictureSchema = new Schema({
    listId: [String],
    thumb: { type: String, required: true },
    large: { type: String, required: true }
});