如何返回一组文档,每个文档都不包含内部数组中的特定项目?
我的数据方案是:
文章:
{
"_id" : ObjectId("57f91ec96241783dac1e16fe"),
"votedBy" : [
{
"userId" : "101",
"vote": 1
},
{
"userId" : "202",
"vote": 2
}
],
"__v" : NumberInt(0)
}
我想返回一组帖子,其中包含任何一个votedBy数组项中的给定userId。 官方文件暗示这是可能的:
MongoDB documentation: Field with no specific array index
虽然它返回一个空集(对于查找具有特定数组项的文档的更简单的情况)。 似乎我必须知道一组正确结果的索引,例如: votedBy.0.userId。
This问题是我找到的最接近的解决方案(应用于我的方案):
db.collection.find({"votedBy": { $not: {$elemMatch: {userId: 101 } } } })
如果数组中唯一的内部文档与我希望不返回的文档匹配,它可以正常工作,但在我上面指定的示例中,文档返回,因为它找到userId = 202内部文档。
只是为了澄清:我想要返回所有文件,他们所投票的任何数组项目都没有给定的userId。
我还尝试了一个更简单的数组,只包含userId作为字符串数组,但是,每个数组都接收一个Id,搜索过程也是一样。
我尝试的另一个解决方案是为uservotes使用不同的集合,并应用查找来执行类似SQL的连接,但似乎有一种更简单的方法。
我正在使用mongoose(node.js)。
答案 0 :(得分:1)
嵌入式$ne
上的用户userId
:
db.collection.find({'votedBy.userId': {$ne: '101'}})
它将使用至少一个userId = "101"