MongoDB数组查询:查找在数组中包含局外人的记录

时间:2019-03-08 18:59:17

标签: arrays mongodb mongodb-query

我有一个图像标签数据库,并带有用于标记标签的Web UI。标签存储在具有以下结构的文档中:

{
 imgID: 'UID of corresponding image',
 tagID: 'UID of tag',
 coordinates:{x1,y1,x2,y2},
 tags:[
    {tag:'a', user:'username'},
    {tag:'a', user:'username'},
    {tag:'typo', user:'username'}
]
}

在我的示例中,我正在寻找包含错误标签typo的文档。 我尝试过

find({$and:[{'tags.tag':{$ne:'a'}},{'tags.tag':'a'}]}),

aggregate([{
    $match:{'tags.tag':'a'}
},{
    $match:{'tags.tag':{$ne:'a'}}
}])`

这不是Find documents with array that doesn't contains a specific value的重复项,因为我正在寻找一个包含数组的文档,该数组的确包含有问题的值,而同时包含任何其他值。如上所述,该问题中提出的解决方案不适用于我的情况。

2 个答案:

答案 0 :(得分:1)

您可以使用$elemMatch来指定查询的$ne部分:

db.col.find({ $and:[ {'tags.tag': 'a' }, { tags: { $elemMatch: { 'tag': { $ne: 'a' } } } } ] })

答案 1 :(得分:1)

您必须使用$ elematch来匹配数组元素

db.col.find({$ and:[{'tags.tag':'a'},{标签:{$ elemMatch:{'tag':{$ ne:'a'}}}}}] })