[英]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.