我的帖子架构看起来像这样。
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来测试这些查询,现在除了一个空数组外我什么都没得到。
答案 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