假设我有一个项目列表。我需要找到(返回一个光标)正好8个项目。首先,我需要看看有多少特色商品。如果我能获得8个特色项目,那么没问题。但如果计数小于8,我需要随机项目,直到我得到8。
是否可以在mongodb中执行此操作?
答案 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个,则附加它们。