我目前正在编写一个应用程序,用于存储要从mongoDB中的API查询的信息。我希望应用程序通过计算它应该确定接下来要查询的内容的比率来实现这一点。
重要的模型部分如下所示:
collaborator: {type: String},
books: [mongoose.Schema.Types.ObjectId]
协作者不是唯一的(按设计),并且每个协作者条目都有一个它引用的objectID数组。
我希望MongoDB输出的是具有最高
的协作者(Sum of occurrences of collaborator name) / (sum of all books in his name)
我存储的信息是协作者名称,我想查询书籍名称上的API(所以书的长度可以是0),我一次只能做一个。这样,我想,我会更经常地询问最重要的一些,一旦我达到合作者的某个配额,它就会要求下一个。
如果有人有更好的方法,欢迎你。
这是我的方法:
model.aggregate([
{$unwind: "$books"},
{$group: {_id: "$_id", bookcount: {$sum: 1} }},
{$group: {_id: "$collaborator", useCases: { $sum: 1 }, totalBookCount: {$sum:"$bookCount"} ? {$sum:"$bookCount"}: 1 }},
{$project: {_id: 1, from: 1, to: 1, quota: {$divide:["$useCases","$totalBookCount"]}}}])
.sort({quota: -1})
.limit(10)
.exec(function (err,document) {
if(err) console.log(err);
for(var i=0;i<document.length;i++){
console.log(document[i]._id);
}
});
我没有得到错误,只是一个空对象。但是,即使所有的书籍数组都是空的,我的三元运算符也应保证输出。有什么想法吗?