在mongo中,如何查找一组项目,然后添加更多内容以填充所需的项目数

时间:2016-10-31 06:38:49

标签: mongodb meteor mongodb-query

假设我有一个项目列表。我需要找到(返回一个光标)正好8个项目。首先,我需要看看有多少特色商品。如果我能获得8个特色项目,那么没问题。但如果计数小于8,我需要随机项目,直到我得到8。

是否可以在mongodb中执行此操作?

2 个答案:

答案 0 :(得分:0)

我认为您要做的是填写项目列表以确保始终返回8.您可以在帮助方法中执行此操作,

var rows = MyTable.find({search: "Something"}).limit(8).fetch();
for (var i=rows.length;i<8;i++) {
    rows.push({name: "Empty data row "+i}):
}
return rows;

答案 1 :(得分:0)

如果您按精选字段对光标进行排序,则可先获取精选光标,然后填写其他光标:

const noMoreThan8Docs = MyCollection.find({},{ sort: { featured: -1 }, limit: 8 });

这假设featured是布尔键。布尔值排序为假 - 然后 - 真,所以你需要反转排序。

我不确定在特色文件之后选择的文件是多么随机。但是,由于您使用Meteor和Meteor使用随机_id(与MongoDB本机不同),您也可以对该键进行排序。

const noMoreThan8Docs = MyCollection.find({},{ sort: { featured: -1, _id: 1 }, limit: 8 });

这也不是真正随机的,因为相同的非特色文档往往会先排序。如果您想真正随机化非功能性项目,您需要random find这些项目,如果您的特色文档少于8个,则附加它们。