目前我有这个发布功能
Meteor.publish('Questions', function(limit, skip) {
check([limit, skip], [Number]);
var findAnswers = UserInfo.find({
userId: this.userId
}).fetch();
return Questions.find({}, {
_id: {
$not: findAnswers.questionid
}
}, {
skip: skip,
limit: limit
});
});
所以基本上有两个集合,问题和用户信息(又名用户答案,嗯,我想我会更改名称),所以在用户信息上我有用户的所有答案。
现在,我当前向用户返回 1x1 问题,这适用于限制(1)和跳过工作,但现在我不想向用户发送他已经回答的问题,我尝试 $不是运算符(operator),但它仍然将问题返回给客户端(用户已经回答的问题)。
这里的$not
是正确的运算符吗?这也将是可扩展的?假设将来用户回答 10 个问题,是否需要数组? (保存已回答问题的 ID)。
更新
我现在已经做了类似的东西。
Meteor.publish('Questions', function(limit, skip) {
check([limit, skip], [Number]);
var idsArray =[], //Ids array to hold all the current answered questions ids
findAnswers = UserInfo.find({ //Simple query
userId: this.userId
}).fetch();
_.each(findAnswers, function(id) {
idsArray.push(id.questionid); //forEach to push the ids on the query
});
return Questions.find({}, { //Returning only questions
skip: skip, //with no answers to the client
limit: limit
});
});
现在我得到了一个 _ids 数组,我怎样才能发送与查询中的 id 不匹配的文件?
第二次更新
经过一番研究,我发现$nin可以做到这一点,但这似乎不起作用,无论如何,仍然将 3 个文档返回给客户端
这里有更多信息。
这是我的问题查询。
> Questions.find().fetch()
[ { _id: '2eGSTigujteL4X7qG',
title: 'Where you work?',
body: 'Tell us about your job' },
{ _id: 'ByiJGwgHTm5dk5CBj',
title: 'Where did you study?',
body: 'Tell us about your where did you study' },
{ _id: 'gExyMfiivpb4ZtQTb',
title: 'Did you have childs?',
body: 'Tell us about your childs' } ]
现在这是我的idsArray
[ '2eGSTigujteL4X7qG', 'ByiJGwgHTm5dk5CBj' ]
这就是我在查询中的做法。
returnQuestions.find({}, {
_id: {
$nin: [idsArray] //already try without []
},
skip: skip,
limit: limit
});
但这仍然向客户端返回 3 个对象,而不是仅 1 个,这应该只返回带有 _id:"gExyMfiivpb4ZtQTb"
的对象,对吧?我不知道我的错误在哪里。
最佳答案
如果您的最后一个代码片段是代码中的实际复制+粘贴,则您的 find()
语法错误(您将选择器放在选项对象中并将选择器对象留空)。你想要的可能应该是这样的:
returnQuestions.find(
{
_id: {
$nin: idsArray // assuming this already is an Array you of course shouldn't add brackets around it
}, {
skip: skip,
limit: limit
});
并且 $nin
确实应该是适合您的情况的正确运算符(您也可以使用不同的方法)。
关于javascript - 根据_id限制发布限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31038968/