我有一个数组:
let arr=["v1","v2","v3"];
此数组是我在mongodb中进行查询的条件。 nodejs中的查询是:
cursor = await myCollection.find({"attribute":{ $in: arr}},{_id:0,title:1});
结果中没有字段在投影中。但是,当我更改$ in并使用$ all时,查询将显示标题字段。
请帮助我
答案 0 :(得分:0)
根据mongoDB文档,在$ in中,运算符选择字段值等于指定数组中任何值的文档。
根据mongoDB文档,在$ all运算符中,选择字段值是包含所有指定元素的数组的文档。
在您的情况下,如果您使用$ all而不是$ in,则此查询将检查数组中的所有元素。
答案 1 :(得分:0)
很简单的话:
差异:1
{ $in: ["v1","v2","v3"] }
用作OR条件,而{ $all: ["v1","v2","v3"] }
符合AND条件。
使用$ in,如果v1,v2和v3中的任何值与“属性”值匹配,则您将获得结果文件。
使用$ all,如果来自v1,v2和v3的所有值必须都存在“属性”值,那么只有您才能获得结果文档。
差异:2
$ all仅应在array属性上使用,就好像您将对字符串属性使用$ all在数组中具有两个或多个值,那么始终得到空结果。
$ in对“数组”和“字符串”这两种类型的属性都很有用,例如在String属性的情况下,如果任何值与数组中的值匹配,那么您将得到相应的文档。