我有一个图像标签数据库,并带有用于标记标签的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的重复项,因为我正在寻找一个包含数组的文档,该数组的确包含有问题的值,而同时包含任何其他值。如上所述,该问题中提出的解决方案不适用于我的情况。
答案 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'}}}}}] })