我有像这样的文件
{
foo : [1, 2]
}
{
foo : [2, 3]
}
给定一个数组
[2, 3, 4]
我将如何只选择第二个文档?即仅选择 foo 中的所有值与给定数组中的值匹配的文档。
基本上有一些方法可以匹配数组。没有适合您需求的确切解决方案。
考虑到您有以下文件:
{ "_id" : ObjectId("51b05a712961f4704684d901"), "x" : [ 6, 7, 8, 9 ] }
{ "_id" : ObjectId("51b05a712961f4704684d902"), "x" : [ 7, 8, 9, 10 ] }
{ "_id" : ObjectId("51b05a712961f4704684d903"), "x" : [ 8, 9, 10, 11 ] }
您可以使用 query1 像:
db.collection.find({x:[3,4,5,6]})
结果仅与 x 之类的数组完全匹配
结果1:
{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5, 6 ] }
query1 将不匹配:
{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5] }
{ "_id" : ObjectId("51b05a712961f4704684d8fe"), "x" : [ 3, 4, 5, 6, 7] }
您可以使用:query2,例如:
db.t.find({x:{$all:[3,4]}})
结果2可以是:
{ "_id" : ObjectId("51b05a722961f4704684daf1"), "x" : [ 3, 4, 5, 6 ] }
{ "_id" : ObjectId("51b05c332961f4704684dce4"), "x" : [ 3, 4, 5 ] }
{ "_id" : ObjectId("51b05c772961f4704684dce5"), "x" : [ 3, 4, 5, 6, 7 ] }
您可以使用:query3,例如:
db.t.find({x:{$in:[3,4]}})
结果 3 看起来像:
{ "_id" : ObjectId("51b05a722961f4704684daf1"), "x" : [ 3, 4, 5, 6 ] }
{ "_id" : ObjectId("51b05a722961f4704684daf2"), "x" : [ 4, 5, 6, 7 ] }
另请参阅此问题:mongodb 数组匹配
因此,$subset 运算符有一个打开/未解决的票证,它可以执行您可能执行的操作。