mongodb查找确切的文件

欧瑞莲·兰伯特

我正在MongoDB中寻找一种查找确切文档的方法,这意味着我不想将文档与预期之外的其他字段进行匹配。

这是我可以对子文档执行的操作

> db.test.insert({a:{b:1,c:2}});
> db.test.insert({a:{b:1}});
> db.test.find({'a.b':1}); // non exact match
{a:{b:1,c:2}}
{a:{b:1}}
> db.test.find({'a':{'b':1}}); // exact match
{a:{b:1}}

我想对主文档(而不是子文档)执行相同的操作。

> db.test.insert({b:1,c:2});
> db.test.insert({b:1});
> db.test.find({'b':1}); // non exact match
{a:{b:1,c:2}}
{a:{b:1}}
> db.test.find({'.':{'b':1}}); // does not work :(
> db.test.find({'b':1, 'c':null}); // works, but how I am supposed to know that 'c' could exists ???
{a:{b:1}}

最终目标是$pull对数组执行此操作

> db.test.insert({a:[{b:1,c:2},{b:1,d:3},{b:1,c:2},{b:1,c:2,d:3}]});
> db.test.update({}, {$pull:{'a':{b:1,c:2}}});
> db.test.find();
{a:[{b:1,d:3}]} // NOOOO :'(

有人对此有想法吗?

编辑:

这是我在数组上找到的精确/部分匹配的一些精度:

  • 数组项目完全匹配: db.test.find({'a':{b:1,c:2}});
  • 数组项部分匹配: db.test.find({'a':{$elemMatch:{b:1,c:2}}});
  • 数组项删除部分匹配: db.test.update({}, {$pull:{'a':{b:1,c:2}}})
  • 删除数组项的完全匹配项:(db.test.update({}, {$pullAll:{'a':[{b:1,c:2}]}})感谢JohnnyHK)
香港强尼

它没有很好的文档记录,但是如果您使用$pullAll而不是$pull,则只会删除完全匹配的元素:

db.test.update({}, {$pullAll:{a: [{b:1,c:2}]}});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mongodb查找确切的文件

来自分类Dev

PowerShell:查找确切的文件夹名称

来自分类Dev

PowerShell:查找确切的文件夹名称

来自分类Dev

查找确切的屏幕尺寸

来自分类Dev

查找确切的FK比赛

来自分类Dev

使用AWK查找确切的模式

来自分类Dev

从PID查找确切的脚本

来自分类Dev

在目录中查找重复的文件名(不指定确切的文件名)

来自分类Dev

在目录中查找重复的文件名(不指定确切的文件名)

来自分类Dev

从用户输入到csv文件内容中查找确切的值

来自分类Dev

linux查找文件更改过去确切的小时

来自分类Dev

sql server查询以查找确切的1年差异

来自分类Dev

在std :: map中查找最接近或确切的键

来自分类Dev

正则表达式查找确切的单词

来自分类Dev

使用grep / awk / sed查找确切的shell变量

来自分类Dev

sql server查询以查找确切的1年差异

来自分类Dev

如何使用XSL查找确切的xml内容

来自分类Dev

仅查找确切的字符串

来自分类Dev

正则表达式查找确切的单词

来自分类Dev

在 SphinxQL 中按顺序查找确切的单词

来自分类Dev

MongoDB聚合仅使用确切的字符串

来自分类Dev

在C#中找出确切的文件类型

来自分类Dev

通配符以按确切的扩展名获取文件

来自分类Dev

如何获得确切的位图文件大小?

来自分类Dev

使用Dask从CSV文件中采样确切的行数

来自分类Dev

FreeBSD 9:如何找到确切的文件名?

来自分类Dev

使用grep和*获得确切的文件名

来自分类Dev

确切的列宽

来自分类Dev

检查确切的URL