我在MongoDB中有一个结构,在一个名为“items”的数组中有不同数量的项。为了进行搜索,我使用以下命令,该命令首先将内容转换为字符串,如在this.items中,根据对象有不同的结构:
db.getCollection('docs').find.('JSON.stringify(this.items[0].value).toLowerCase().indexOf("text")!=-1')
我的问题是,由于我不知道每个文档的项目数量,我必须使用通配符作为this.items [*]。value,但它不起作用。
有没有人知道任何解决方案,或对此有其他想法?
答案 0 :(得分:2)
您可以使用items.value
的点表示法来定位所有value
元素的items
字段,使用正则表达式来执行不区分大小写的子字符串匹配:
db.getCollection('docs').find({ 'items.value': /text/i })
答案 1 :(得分:1)
您可以使用$ elemMatch(https://docs.mongodb.com/manual/reference/operator/projection/elemMatch/)
db.docs.find({items: {$elemMatch: {value: {$regex : "text"}}}});
因此,此查询将在items数组中找到包含字符串“text”的item
的所有文档,在此操作之后,您可以计算文档具有的项目数。
答案 2 :(得分:-1)
您可以迭代每个文档并应用indexOf
,类似这样......
var cursor = db.getCollection('docs').find({}); // get all docs
var newOut = []; // new array of items if match with some condition
while ( cursor.hasNext() ){ // iterate all docs
var doc = cursor.next(); // get the document in focus
doc.items.forEach(function(item){ // iterate the items of doc.items
if ( item.toLowerCase().indexOf("text") !== -1 ) // check if text exists in array
newOut.push(item); // add to new array
});
};
printjson(newOut);