gpt4 book ai didi

node.js - 如何在 Mongoose 中找到具有属性值的对象的路径?

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:49 26 4
gpt4 key购买 nike

我想在 mongodb 数据库中使用名为“task”的对象。一项任务可以有一个或多个任务作为其子任务。我需要找到一个任务,该任务可能位于层次结构的任何级别及其 _id 或其他属性值。我怎样才能在 mongoose 或 mongodb 中做到这一点?我的任务架构如下:

    var mongoose = require('mongoose');

var Project = require(./project.js);
var Resource = require(./resource.js);
var Group = require(./group.js);
var Phase = require(./phase.js);
var Objective = require(./objective.js);
var Milestone = require(./milestone.js);
var Decision_tag = require(./decision_tag.js);

var createInfo = require(./plugins/createInfo);


var taskSchema = new mongoose.Schema(
{
title :{ type : String, unique : true, required : true, trim :true},
resources :[{type : mongoose.Schema.Types.ObjectId , ref : 'Resource', required, false}],
groups :[{type : mongoose.Schema.Types.ObjectId , ref : 'Group', required, false}],
tasks :[{type : mongoose.Schema.Types.ObjectId , ref : 'Task', required, false}],
decision_tags :[{type : mongoose.Schema.Types.ObjectId , ref : 'Decision_tag' , required : false}]

});
taskSchema.plugin(createInfo);


module.exports = mongoose.model('Task' , 'taskSchema' , tasks);

最佳答案

根据上面代码中定义的架构,所有任务都作为“顶级任务”存储在一个集合中。您的层次结构仅作为这些任务之间的引用而存在,因此您可以使用所有正常的 Mongoose 查询功能进行查询来查找您的任务或子任务,例如:

mongoose.model('Task').find({title: 'myTitle'});

剩下的主要问题可能是查找/加载/显示您找到的子任务的整个层次结构。也许存储对任务父任务的引用而不是存储子任务会更好。或者两者都做。这实际上取决于您是要针对写入进行优化还是针对读取进行优化。存储父任务可以让您轻松识别顶级任务(父任务为空)。

如果您从不显示/加载没有完整层次结构的子任务,您也可以使用子文档而不是 ObjectId 引用,但查询子任务将会很棘手。

关于node.js - 如何在 Mongoose 中找到具有属性值的对象的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32234350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com