我的帖子上有一些标签,我想以后再搜索。标签全都在不同的集合中,我将它们的_id
和一些其他数据添加到每个post对象的array
上。但是,在撰写帖子时,所有标签ID都以strings
而不是ObjectId's
的形式出现,这会导致问题,因为稍后在搜索它们时,它们与下一行不匹配。我的问题是,当它们最初添加到数据库时,如何将它们与ObjectId
一起放入数据库?我不认为以后可以在转换时转换它们,因为我使用$lookup
进行搜索。
以下是当前如何将它们写入数据库的示例:
// Other post data...
"tags" : [
{
"_id" : "5c69d914e05511106048780c",
"name" : "Food",
"createdAt" : "2019-02-17T21:58:44.869Z",
"updatedAt" : "2019-02-17T21:58:44.869Z",
"__v" : 0
},
...
];
我最初的想法是在创建新帖子时执行以下操作:
const tmpTools = [tools here];
tmpTools.forEach(function(tool) {
console.log(ObjectId(tool._id));
});
// Then add the post to the collection
更新:这是使用猫鼬的架构
const postSchema = new Schema({
title: { type: String, required: true },
body: { type: String, required: true },
tags: { type: Array, required: true },
author_id: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
author_name: { type: String, required: true },
likes_count: { type: Number, required: true },
dislikes_count: { type: Number, required: true },
status: { type: String, required: true },
},
{ timestamps: true }
);
编辑:添加帖子后,我使用汇总框架来查找帖子使用标签的次数
Tag.aggregate([
{
$lookup: {
from: 'recipes',
localField: '_id',
foreignField: 'tags._id',
as: 'posts'
}
}
])