【发布时间】:2017-02-24 18:23:00
【问题描述】:
当用户向我的node.js 应用程序提交内容时,他会输入四项内容:start_date、他的 Facebook 用户名、文本内容和一个标志,该内容是应该对所有人可见还是只对他的 Facebook 朋友可见。
当用户获取内容时,他可以从其他用户那里获取公开内容以及从他的 facebook 朋友那里获取内容(即使他们只为他们的朋友提交内容)。
我创建了一个mongoose 查询,它在这种情况下可以正常工作。我是这样做的:
var query = Test.find({})
if(startDate != undefined) {
var startDate = new Date(req.param('startDate'));
query = query.where('updated_at').gte(startDate);
}
if (friends != undefined) {
var friendsSplitted = friends.split(",");
for(var i=0; i<friendsSplitted.length; i++) {
query = query.or([{ 'facebook_username': friendsSplitted[i] }]);
}
}
query = query.where('hidden').equals(false);
if (publicFlag != undefined && publicFlag === "true") {
query = query.or({friends_only: false});
}
使用上面的代码,当用户只查询他朋友的内容(可能是私人的或公共的)时,他 POSTs startDate,他的 friends 的数组,标志 hidden 设置为假和publicFlag 设置为假。构造查询:
猫鼬:test.find({ updated_at: { '$gte': new Date("2011 年 10 月 15 日,星期六 格林威治标准时间 00:00:00")},隐藏:假,'$or':[ { facebook_username: 'XXXXXXXXXXXXXXX' }, { facebook_username: 'YYYYYYYYYYYYYYY' } ] }) { 字段:未定义}
用户不仅可以查询他朋友(私人或公共)的内容,还可以查询其他人的公开内容。为此,他POSTs startDate,他的friends 的数组,标志hidden 设置为false 和publicFlag 设置为true。构造查询:
猫鼬:test.find({ updated_at: { '$gte': new Date("2011 年 10 月 15 日,星期六 格林威治标准时间 00:00:00")},隐藏:假,'$or':[ { facebook_username: 'XXXXXXXXXXXXXXX' }, { facebook_username: 'YYYYYYYYYYYYYYYY' }, { friends_only: false } ] }) { fields: undefined }
上面的代码工作正常。
我想添加另一种情况,当用户可以获取具有特定主题标签的内容时。 基本上,当用户选择此选项时,他可以看到仅包含这些主题标签的其他用户的内容。不过,该内容是他的 fb 朋友帖子(私人或公开)和其他人的帖子(即公开)。
为此,我考虑将这个条件添加到我原来的 node.js 代码中:
if (hashtagsInput != undefined) {
var hashtags = hashtagsInput.split(",");
for(var i=0; i<hashtags.length; i++) {
query = query.or([{ 'hashtags': hashtags[i] }]);
}
}
但此解决方案无法正常工作。
当用户想要获取他朋友的(私人和公共)内容和其他人的公共内容 - 但只包含一个主题标签 - 他 POSTs startDate,他的 friends 的数组,标志hidden 设置为false,publicFlag 设置为true 和他的hashtags 的数组。当他这样做时,它会创建一个查询:
猫鼬:test.find({ updated_at: { '$gte': new Date("2011 年 10 月 15 日,星期六 00:00:00 GMT")}, '$or': [ { hashtags: 'test1' }, { hashtags: 'test2' }, { facebook_username: 'XXXXXXXXXXXX' }, { facebook_username: 'YYYYYYYYYYYYYYYYYY' }, { friends_only: false } ], 已删除: false }) { 字段:未定义}
基本上,我只想将一般查询限制为特定主题标签。
此查询没有返回正确的数据。现在我不是mongoose 专家,昨天我花了几个小时试图弄清楚,但我认为问题在于它返回的数据要么包含一个主题标签,要么它的作者是我的一个脸书好友。
我想修复此查询,以便 - 如果用户 POSTs 有标签 - 它会获取他的朋友和所有人的公开和私有内容,但仅包含至少包含其中一个的内容标签。当用户不提供主题标签时 - 它应该照常工作,获取他朋友的所有私人和公共内容以及所有人的公共内容。
您能帮我修复我的node.js 代码,以便它创建正确的mongoose 查询吗?
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query