Mongodb 如何对不在非正统大小的子文档数组中的内容进行mongo查询?

Mongodb 如何对不在非正统大小的子文档数组中的内容进行mongo查询?,mongodb,Mongodb,我有一个mongodb集合,里面有65k+个文档,每个文档都有一个名为site_histories的属性。它的值是一个数组,可能是空的,也可能不是空的。如果它不是空的,它将有一个或多个类似于以下内容的对象: "site_histories" : "[{\"site_id\":\"129373\",\"accepted\":\"1\",\"rejected\":\"0\",\"pending\":\"0\",\"user_id\":\"12743\"}]" 我需要进行一个查询,查找文档集合中没有

我有一个mongodb集合,里面有65k+个文档,每个文档都有一个名为site_histories的属性。它的值是一个数组,可能是空的,也可能不是空的。如果它不是空的,它将有一个或多个类似于以下内容的对象:

"site_histories" : "[{\"site_id\":\"129373\",\"accepted\":\"1\",\"rejected\":\"0\",\"pending\":\"0\",\"user_id\":\"12743\"}]"
我需要进行一个查询,查找文档集合中没有给定用户id的每个实例

我对Mongo还很陌生,所以我试图进行一个查询,找到每个具有给定用户id的实例,我当时正计划在其中添加$ne,但即使这样也不起作用。这是我使用的不起作用的查询:

db.test.find({site_histories: { $elemMatch: {user_id: '12743\' }}})
有人能告诉我为什么这个查询不起作用吗?还有谁能帮我格式化一个查询,以完成我需要的最终查询吗?

如果您的站点历史记录真的是一个数组,那么它应该像执行以下操作一样简单:

db.test.find({"site_histories.user_id": "12743"})
在数组的所有元素中查找


然而,我有点害怕所有这些反斜杠。如果site_histories是一个字符串,那么它将不起作用。这意味着模式设计得很糟糕,您可能会尝试使用

数据库是使用我制作的php脚本创建的,该脚本用于将两个sql表转换为mongodb,因此如果有更好的方法,我可以在>1小时内将数据库更改为该模式。因此,我以前尝试过使用点表示法,但它不起作用,所以我的担心是合理的。site_历史记录是一个字符串。我不懂php,但请尝试这样做,使您的站点_历史是一个json数组,看起来像[{site_id:129373,accepted:1,rejected:0,pending:0,user_id:12743}]。那么给定的语法应该可以工作。