mongodb:在数组字段

时间:2017-09-02 07:35:16

标签: mongodb mongoose

我的帖子架构看起来像这样。

const Post = new Schema({
  author: String,
  view: Number,
  point: Number,
  title: String,
  images: [Schema.Types.Mixed],
  content: String,
  tags: [String],
  comments: [{ displayName: String, body: String, createdAt: Date }],
  createdAt: {
    type: Date,
    default: Date.now
  },
  editedAt: Date
})

我的疑问是:

Post.statics.findByTags = function(tags) {
  return this.find({
      tags: { $in: tags }
  }).
  limit(10).
  sort({ createdAt: -1 }).
  exec()
}

我要做的是匹配包含参数“tags”提供的标签之一的帖子。

ex)如果标签等于[“tag1”,“tag2”]和

Post1 = {......某些值,标签:[“tag1”]}, Post2 = {...一些值,标签:[“tag1”,“tag2”]}

我想匹配这两个帖子。

我正在使用Postman来测试这些查询,现在除了一个空数组外我什么都没得到。

1 个答案:

答案 0 :(得分:0)

我发现了我犯的错误。

查询没有错,我做错了就是保存"标签" JSON之类的字段,如#34; [' xxx',' xxxx']"。它似乎是完美的阵列,但是,它只是一个字符串,我无法得到我期望的结果。

所以,我在" createPost"中添加了JSON.parse。方法,它现在产生正确的结果。

// tags should be array type, so parse them
let { tags } = body
tags = JSON.parse(tags)
const { author, title, images, content } = body