【发布时间】:2012-05-14 12:17:42
【问题描述】:
我正在尝试在 MongoDB/Mongoose 中执行“where $in”查询,其中我只想为数组中的每个标记返回一个结果。有点像:
db.images.find( { hashtag : { $in : ['tag1', 'tag2', 'tag3'] } } );
我会得到三个独特的结果;每个都来自我指定的一组标签。
[{name:'image1', hashtag:'tag1'},
{name:'image55', hashtag:'tag2'},
{name:'image99', hashtag:'tag3'}]
在 SQL 中,您会使用 GROUP BY 之类的东西,但如果不执行 Map/Reduce,我无法在 MongoDB 中找到等效项。
无论如何要这样做?谢谢。
--编辑 我想要的等效 SQL 是:
SELECT * FROM images WHERE hashtag in ('tag1', 'tag2', 'tag3') GROUP BY hashtag;
或者理想情况下,虽然 MongoDB 没有随机数
SELECT * FROM images WHERE hashtag in ('tag1', 'tag2', 'tag3') GROUP BY hashtag ORDER BY rand();
【问题讨论】:
-
您能说明一下您的文档是什么样的吗?它是名称和主题标签数组吗?我实际上并没有看到 SQL group by 在这里会为您做什么 - 看起来您想要任何带有 tag1 的单个图像名称、带有 tag2 的任何图像名称以及带有 tag3 的任何图像名称?我什至不确定这是否可以在您的应用程序中轻松解决,更不用说在查询中...
-
不,我的文档实际上并非如此。这只是我想要完成的一个例子。
-
SQL 很简单:SELECT * FROM
imagesWHEREhashtagin ('tag1', 'tag2', 'tag3') GROUP BYhashtag; -
relational 没有主题标签数组,所以我仍然不明白您的 SQL 示例。您是否假设 SQL 将为每个名称/标签对有一行?这将在带有聚合框架的 2.2 中提供,您可以在其中展开数组,但您仍然必须解决如何保证每个名称和每个主题标签都没有重复的问题。
-
我没有说“hashtag”是一个数组。在本例中,它被用作字符串字段。
标签: mongodb mongoose mongodb-query