如何在MongoShell中实现以下SQL?
Select TableA.* from TableA where TableA.FieldB in (select TableB.FieldValue from TableB)
Mongo doc给出了一些例子
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
我希望该数组是从另一个查询动态的.可能吗?
扩展我的问题
我有一个bot
名字的集合
机器人收藏
{ "_id" : ObjectId("53266697c294991f57c36e42"), "name" : "teoma" }
我有一个用户流量的集合,在该流量集合中,我有一个字段 useragent
userTraffic集合
{ "_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 }) }
Neil Lunn.. 6
不在单个查询中它不是.
从查询中获取结果并将其作为您的状态进行输入没有任何问题.
var list = db.collectionA.find({},{ "_id": 0, "field": 1 }).toArray();
results = db.collectionB.find({ "newfield": { "$in": list } });
但是你的实际目的并不清楚,因为单独使用SQL查询作为你想要实现的唯一例子通常不是回答这个问题的好指南.造成这种情况的主要原因是,您可能应该采用与关系相同的方式进行建模.否则,为什么要使用MongoDB呢?
我建议阅读有关数据建模的文档部分,其中显示了如何处理常见建模案例的几个示例.
考虑到这些信息,那么也许您可以重新考虑一下您的建模,如果您对那里的其他问题有特定的问题,那么请随时在这里提出您的问题.
不在单个查询中它不是.
从查询中获取结果并将其作为您的状态进行输入没有任何问题.
var list = db.collectionA.find({},{ "_id": 0, "field": 1 }).toArray();
results = db.collectionB.find({ "newfield": { "$in": list } });
但是你的实际目的并不清楚,因为单独使用SQL查询作为你想要实现的唯一例子通常不是回答这个问题的好指南.造成这种情况的主要原因是,您可能应该采用与关系相同的方式进行建模.否则,为什么要使用MongoDB呢?
我建议阅读有关数据建模的文档部分,其中显示了如何处理常见建模案例的几个示例.
考虑到这些信息,那么也许您可以重新考虑一下您的建模,如果您对那里的其他问题有特定的问题,那么请随时在这里提出您的问题.