繁体   English   中英

如何使Mongoose(在Node.js上运行)运行任意查询字符串?

[英]How can I make Mongoose (running on Node.js) run an arbitrary query string?

我有一个称为“文件”的表,其中每个对象都有一个名称,一个父项和一些其他字段。 我想要做的是,给定文件名,找到root的路径(root是在parent为时出现的)。

我有一个在Mongo终端中运行时完美运行的查询:

var currentFile = parent;
var queue = [];

while(currentFile !== '') {
    var file = db.files.find( { name: currentFile } );
    currentFile = file[0].parent;
    queue.push(currentFile);
}

但是不幸的是,Mongoose不允许(据我从文档中看到的)任意字符串查询。 如果猫鼬允许同步查询,我可以做到,但是我似乎也找不到这种能力。

解决了

重新阅读第一条注释后,我发现要实现所需的功能,我需要向currentFile为空时调用的参数添加回调

if(currentFile === '') {
    callback();
else
    recursiveFunc(currentFile, callback);

我还添加了“路径”字段,以防万一我决定提高效率:)

谢谢大家的帮助!

递归函数呢?

var queue = [];
var currentFile = parent;
function findStuff(currentFile) {
    File.findOne({name: currentFile}, function(err, file) {
        currentFile = file[0].parent;
        queue.push(currentFile);
        findStuff(currentFile)
    })
}

还是作为“任意查询字符串”,我不确定您的意思。 这是标准的mongo语法。 如果您想直接打node-mongodb-native驱动程序,您可以总是这样做。 它仍然是异步的.... https://github.com/christkv/node-mongodb-native

File.collection.find({}, function(err, files) {});

那更简单的事情呢? 抱歉,我没有完全理解您的意图。

var queue = [];
var currentFile = parent;
File.find({name: currentFile}, function(err, files) {
    files.forEach(function(file) {
         queue.push(file.parent)
    })
})

也许您可以通过在文档中存储一个额外的字段来完全避免这种情况,该字段包含root的路径-例如,称为path_to_root的数组path_to_root

然后,在插入新文档时,只需复制父级的path_to_root值并将父级的_id附加到该值,然后将其用作新插入的文档的path_to_root 使用此策略,您可以使用mongodb $in查询快速查询所有文档的返回根目录的路径。

不知道这是否可以在您不了解更广泛的上下文的情况下为您工作,而是将其扔在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM