查询相关文件

时间:2016-08-18 01:03:58

标签: node.js mongoose querying

我正在开发一个用于管理课程及其教程的管理系统。

我们说我有以下架构:

router.get('/courses/:code/tutorials/:number/edit', function (req, res) { 
    Course.findOne({ 
        code: req.params.code 
    }).populate({ 
        path: 'tutorials', match: { number: req.params.number }
    }).exec(function (err, course) {
        res.render('admin/tutorial', { course: course, tutorial: course.tutorials[0], method: 'put' });
    });
});

每个课程都有一个名称,例如Web编程简介和唯一代码,例如CSCC09。每个教程都有一个非唯一号码,例如0001.两门课程将有相同编号的教程。但是,课程中的每个教程都有不同的编号。

目前,当用户编辑教程时,它将通过以下路径:

Course.findOne({ code: req.params.code}, function (err, course) {
    Tutorial.findOne({ number: req.params.number }, function (err, tutorial) {
        // ...
    });
});

我这样做的原因是为了确保匹配的教程适用于相应的课程。

那么,对于我的问题,是否有更简洁的方法来查询相关模型?

我更愿意做类似下面的事情,但我不能,因为匹配的教程可能不适用于相关课程:

public static class ModApi
{
    [DllImport("user32.dll", EntryPoint = "SendMessageTimeout", SetLastError =     true, CharSet = CharSet.Unicode)]
    public static extern uint SendMessageTimeoutText(IntPtr hWnd, int Msg, int countOfChars, StringBuilder text, uint flags, uint uTimeoutj, uint result);

    public static string GetText(IntPtr hwnd)
    {
        var text = new StringBuilder(1024);

        if (SendMessageTimeoutText(hwnd, 0xd, 1024, text, 0x2, 5000, 0) != 0)
        {
            return text.ToString();
        }

        MessageBox.Show(text.ToString());
        return "";
    }
}

我知道我可以使用文档的ID,但是我希望有可读的URL(以便用户可以从浏览器的URL栏快速转到页面)。

1 个答案:

答案 0 :(得分:-1)

你应该使用mongoose-relationship librarie。它使它更容易。

    var mongoose = require("mongoose"),
    Schema = mongoose.Schema,
    relationship = require("mongoose-relationship");

    var ParentSchema = new Schema({
       children:[{ type:Schema.ObjectId, ref:"Child" }]
    });
    var Parent = mongoose.model("Parent", ParentSchema);

    var ChildSchema = new Schema({
        parent: { type:Schema.ObjectId, ref:"Parent", childPath:"children" }
    });
    ChildSchema.plugin(relationship, { relationshipPathName:'parent'});
    var Child = mongoose.model("Child", ChildSchema)

     var parent = new Parent({});
     parent.save();
     var child = new Child({parent:parent._id});
     child.save() //the parent children property will now contain child's id
     child.remove() //the parent children property will no longer contain the child's id