如何在MongoShell中实现以下SQL?
Mongo doc 提供了一些示例。
我希望选择所有用户流量文件,其中的
这是我想到的。
Select TableA.* from TableA where TableA.FieldB in (select TableB.FieldValue from TableB)
Mongo doc 提供了一些示例。
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
我希望数组可以根据另一个查询动态生成。这可行吗?
扩展我的问题
我有一个机器人名称的集合。
机器人集合
{
"_id" : ObjectId("53266697c294991f57c36e42"),
"name" : "teoma"
}
我有一个用户流量的集合,在这个流量集合中,我有一个字段 useragent
用户流量集合
{
"_id" : ObjectId("5325ee6efb91c0161cbe7b2c"),
"hosttype" : "http",
"useragent" : "Mediapartners-Google",
"is_crawler" : false,
"City" : "Mountain View",
"State" : "CA",
"Country" : "United States"
}
我希望选择所有用户流量文件,其中的
useragent
包含bot
集合中的任何名称。这是我想到的。
var botArray = db.bots.find({},{name:1, _id:0}).toArray()
db.Sessions.find({
useragent: {$in: botArray}
},{
ipaddress:1
})
我认为这里正在进行等于比较,但我希望它进行类似于%%的比较
一旦我得到结果,我想对该结果集进行更新,设置为is_crawler= true
尝试了类似这样的东西,没有什么帮助
db.bots.find().forEach( function(myBot) {
db.Sessions.find({
useragent: /myBot.name/
},{
ipaddress:1
})
});
另一种循环浏览记录的方法,但没有找到匹配项。
var bots = db.bots.find( {
$query: {},
$orderby:{
name:1}
});
while( bots.hasNext()) {
var bot = bots.next();
//print(bot.name);
var botName = bot.name.toLowerCase();
print(botName);
db.Sessions.find({
useragent: /botName/,
is_crawler:false
},{
start_date:1,
ipaddress:1,
useragent:1,
City:1,
State:1,
Country:1,
is_crawler:1,
_id:0
})
}