在将MongoDB中的_id字段设置为ObjectId之前,将其写入数据库

时间:2019-03-07 00:35:57

标签: javascript mongodb mongoose

我的帖子上有一些标签,我想以后再搜索。标签全都在不同的集合中,我将它们的_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'
        }
    }
])

0 个答案:

没有答案