Javascript 使用mongoose按嵌套文档属性查找
我目前有一个文档集合,每个文档都包含指向该集合中其他文档的数组。我需要查询这个集合中嵌套在数组中的文档是否包含某个属性。我希望这能更清楚地解释我的要求:Javascript 使用mongoose按嵌套文档属性查找,javascript,mongodb,node.js,mongoose,Javascript,Mongodb,Node.js,Mongoose,我目前有一个文档集合,每个文档都包含指向该集合中其他文档的数组。我需要查询这个集合中嵌套在数组中的文档是否包含某个属性。我希望这能更清楚地解释我的要求: if doc.list1[0].prop = 'foo' or doc.list2[0].prop = 'foo' then select doc 我尝试过像这样使用.find(),但没有效果 { 'doc.list1': 'foo', $or: [ { 'doc.list2': 'foo' } ] }
if doc.list1[0].prop = 'foo' or doc.list2[0].prop = 'foo' then select doc
我尝试过像这样使用.find(),但没有效果
{
'doc.list1': 'foo',
$or: [
{ 'doc.list2': 'foo' }
]
}
我走对了吗?因为我想我不是。这是我能从文档中得到的最好的信息
编辑
下面是我使用与Thomas建议相同的布局初始化的实际查询
var query = this.Word.find({
$or: [
{ 'before.0.cleanWord': topic },
{ 'after.0.cleanWord': topic },
{ 'cleanWord': topic }
]
});
太好了,我明天才能测试,但这看起来很有希望。所以这将搜索数组中的每个嵌套文档,而不仅仅是第一个?我很难理解数据库中发生了什么。它是一个对象ID数组吗?无论如何,这应该是一个有效的$or查询,您发布的查询将始终与doc.list1='foo'匹配,并且您的$or语句是无关的,因为它只有一个元素,更像是and。好的,我已经使用您的建议将当前代码附加到我的问题中。它仍然不返回任何文档。但仍在调试。我的错!它适用于您的代码,另一个问题是我没有将
cleanWord
添加到模式中。非常感谢你!
{
$or: [
{ 'doc.list1.0.prop': 'foo' }
{ 'doc.list2.0.prop': 'foo' }
]
}