Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于javaapi的MongoDB查询_Java_Mongodb_Api_Mongodb Query - Fatal编程技术网

基于javaapi的MongoDB查询

基于javaapi的MongoDB查询,java,mongodb,api,mongodb-query,Java,Mongodb,Api,Mongodb Query,以下是我的MongoDB的示例文档: user:{ _id:1, name:'xyz', age:12, mobile:21321312, transaction:[{ trans_id:1, prod:'a', purchasedAt:ISODate("2015-02-01"), }, { trans_id:2, prod:'b', purchasedAt:ISODate("2015-02-01") }, { trans_id:3, prod:'c', purchasedAt:ISODate(

以下是我的MongoDB的示例文档:

user:{
_id:1,
name:'xyz',
age:12,
mobile:21321312,
transaction:[{
trans_id:1,
prod:'a',
purchasedAt:ISODate("2015-02-01"),
},
{
trans_id:2,
prod:'b',
purchasedAt:ISODate("2015-02-01")
},
{
trans_id:3,
prod:'c',
purchasedAt:ISODate("2014-11-24")
}]
,...
}
我的查询如下所示:

db.user.find({transaction:{$elemMatch:{prod:'a', purchasedAt:ISODate("2015-02-01")}}, transaction:{$elemMatch:{prod:{$nin:['b','c']}, purchasedAt:ISODate("2015-02-01")}}}).count()
我正在尝试获取在日期“2015-02-01”购买产品“a”但未在同一天购买产品b&c的用户数

因此,在Java中尝试使用查询执行此操作时:

coll.find(new BasicDBObject().append("transaction", new BasicDBObject("$elemMatch", new BasicDBObject("prod", 'a').append("purchasedAt", Date))).append("transaction", new BasicDBObject("$elemMatch", new BasicDBObject("prod", new BasicDBObject("$nin",['b','c'])).append("purchasedAt", Date)));
我也尝试过:

coll.find(new BasicDBObject("transaction", new BasicDBObject("$elemMatch", new BasicDBObject("prod", 'a').append("purchasedAt", Date))).append("transaction", new BasicDBObject("$elemMatch", new BasicDBObject("prod", new BasicDBObject("$nin",['b','c'])).append("purchasedAt", Date)));
其中
Date
util.Date
对象中的“2015-02-01”

我发现Java忽略了查询部分中的
$,也就是说,它忽略了
{transaction:{$elemMatch:{prod:'a',purchasedAt:ISODate(“2015-02-01”)}
&只执行
$nin
部分

我是通过DBCursor对象发现的

以下是光标的输出:

Cursor: Cursor id=0, ns=mydb.user, query={ "transaction" : { "$elemMatch" : { "prod" : { "$nin" : [ "b" , "c"]} , "purchasedAt" : { "$date" : "2015-02-01T00:00:00.000Z"}}}}, numIterated=0, readPreference=primary

因为我的结果是不准确的。我想知道为什么在Mongo shell中,完全相同的查询工作得很好,但是没有用java API。我的查询结构有什么问题吗?< /P> < P>我猜这个问题现在已经不成立了,但是,如果你仍然不考虑它的答案,你是在寻找“$$”吗?运算符,它可以检查不存在的类型。

您应该能够使用
toString()
基本CDBO对象上查看它生成的查询。当然,它会忽略第一部分,因为这是一个
映射
,您可以使用
事务
键两次。尽管第二个键会覆盖第一个。
toString()
输出也与游标对象相同。
查询:{“transaction”:{“$elemMatch”:{“prod”:{“$nin”:[“b”,“c”]},“purchasedAt”:{“$date”:“2015-02-01T00:00:00.000Z”}}
请参阅我评论的第二部分:
basicdboObject
是一个
映射
。谢谢,这很有用。但是我如何让Java同时查询这两个部分呢?还有其他方法可以查询吗?我无法理解我的查询结构。你可以简单地使用
$和
操作符()在里面你放了两个
事务
查询。这应该行得通。