- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个名为 MongoRule
的 JUnit 规则
public class MongoRule extends ExternalResource {
private static final Logger LOGGER = LoggerFactory.getLogger(MongoRule.class);
private final MongoService mongoService;
public MongoRule() throws UnknownHostException {
mongoService = new MongoService(getConfiguredHost(), getConfiguredPort(), getConfiguredDatabase());
}
@Override
protected void before() throws Throwable {
LOGGER.info(" Setting up Mongo Database - " + getConfiguredDatabase());
}
@Override
protected void after() {
LOGGER.info("Shutting down the Mongo Database - " + getConfiguredDatabase());
mongoService.getMongo().dropDatabase(getConfiguredDatabase());
}
@Nonnull
public DB getDatabase() {
return mongoService.getMongo().getDB(getConfiguredDatabase());
}
@Nonnull
public Mongo getMongo() {
return mongoService.getMongo();
}
@Nonnull
public MongoService getMongoService() {
return mongoService;
}
public static int getConfiguredPort() {
return Integer.parseInt(System.getProperty("com.db.port", "27017"));
}
@Nonnull
public static String getConfiguredDatabase() {
return System.getProperty("com.db.database", "database");
}
@Nonnull
public static String getConfiguredHost() {
return System.getProperty("com.db.host", "127.0.0.1");
}
}
然后我尝试如下插入一些文档
public static void saveInDatabase() {
LOGGER.info("preparing database - saving some documents");
mongoRule.getMongoService().putDocument(document1);
mongoRule.getMongoService().putDocument(document2);
}
其中 document1
和 document2
是有效的 DBObject
文档。架构看起来像
{
Id: 001
date_created: 2012-10-31
vars: {
'1': {
name: n1
value:v1
}
'2': {
name: n2
value:v2
}
'3': {
name: n3
value:v3
}
}
{
Id: 002
date_created: 2012-10-30
vars: {
'1': {
name: n4
value:v4
}
'2': {
name: n5
value:v5
}
'3': {
name: n6
value:v6
}
}
现在我尝试查询集合并获取这些对象,所以我这样做
public static void getDocuments(List<String> documentIds) {
BasicDBList docIds = new BasicDBList();
for (String docId: documentIds) {
docIds.add(new BasicDBObject().put("Id", docId));
}
DBObject query = new BasicDBObject();
query.put("$in", docIds);
DBCursor dbCursor = mongoRule.getDatabase().getCollection("mycollection").find(query);
System.out.println(dbCursor == null);
if (dbCursor != null) {
while (dbCursor.hasNext()) {
System.out.println("object - " + dbCursor.next());
}
}
}
mycollection
是保存所有文档的集合,它来自外部服务。
当我运行此文档时,我看到以下内容
preparing database - saving some documents
inserting document - DBProposal # document1
inserting document - DBProposal # document2
false
这意味着 collection.find()
找不到这些文件。
我在这里没有做什么?我怎样才能取回文件?
我对将 Java
与 Mongo
结合使用还很陌生,并使用了这个 reference构造查询
更新
更改构造查询的方式后,我仍然看不到文档
public static void getDocuments(List<String> documentIds) {
BasicDBList docIds = new BasicDBList();
docIds.addAll(documentIds)
DBObject query = new BasicDBObject();
query.put("$in", docIds);
DBCursor dbCursor = mongoRule.getDatabase().getCollection("mycollection").find(query);
System.out.println(dbCursor == null);
if (dbCursor != null) {
while (dbCursor.hasNext()) {
System.out.println("object - " + dbCursor.next());
}
}
}
集合名称通过
返回private static String getCollectionName(@Nonnull final DBObject dbObject) {
return "mycollection";
}
最佳答案
你现在做的相当于:
db.col.find({$in:[{Id:id1}, {Id:id2}, ..., {Id:idN}]})
这不是一个有效的查询,因为您没有指定要 $in 的字段。我假设你想要:
db.col.find({Id:{$in:[id1, id2, ..., idN]}})
相应地更改您的查询构造代码,您应该没问题。
编辑:添加正确的代码:
public static void getDocuments(List<Integer> documentIds) {
BasicDBList docIds = new BasicDBList();
docIds.addAll(documentIds)
DBObject inClause = new BasicDBObject("$in", docIds);
DBObject query = new BasicDBObject("Id", inClause);
DBCursor dbCursor = mongoRule.getDatabase().getCollection("mycollection").find(query);
System.out.println(dbCursor == null);
if (dbCursor != null) {
while (dbCursor.hasNext()) {
System.out.println("object - " + dbCursor.next());
}
}
}
请注意,这里假设“Id”不是“_id”
关于java - MongoDB Java : Finding objects in Mongo using QueryBuilder $in operator returns nothing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650970/
我有一个 合作伙伴集合,我正在使用 pymongo 来检索数据 当我使用 MongoDB 查询集合时,我看到以下结果 db.partner.find({'unique_key': 'c89dbe313
嗨,我正在尝试在一个 find 命令中查找所有 js 和 css 文件。我尝试了以下所有方法但徒劳无功: find WebContent -name "*.[jc]ss?" find WebConte
我使用以下 find 命令查找并显示所有具有输入文本模式的文件。 找 。 -type f -print|xargs grep -n "模式" 我有很多项目文件夹,每个文件夹都有自己的名为“Makefi
我在Windows环境中使用Gnuwin32二进制文件。 当我想查找某种类型的文件时(例如PDF),我通常运行: find . -iname '*.pdf' -print 这在任何UNIX系统上均可完
我使用的是 Julia 编程语言,我知道你可以通过以下方式使用 find 函数: a = [ 1 2 3 4 3 5 3 6 7 8 9 3 ] find(a .== 3) 它将返回:3,5,7,12
jsperf's link 我不是 jQuery 专家(甚至不是一个好的用户),我没有研究它的整个源代码(只有一小部分不能帮助我解决这个问题)。 有人可以为我解释一下吗? 最佳答案 这个: $p.fi
我应该如何在 CentOS 7 中修复这个错误? [jalal@goku HW4]$ git clone https://github.com/pathak22/pyflow.git Cloning
是否可以更改传递给 find 中的 exec 的参数?例如,我需要以不同的名称复制文件:*.txt -> *.new.txt现在我正在为两个命令执行此操作: find /root/test -name
我想通过cleartool find 命令找到*.cs 和*.cpp 文件。但它失败了。 cleartool find "M:\test_view\code" -name "*.cs *.cpp"
我正在使用 PyMongo,看到有人建议使用 find()[:] 而不是 find()。很好奇有什么区别? 最佳答案 [:] 制作列表的浅拷贝,因此对对象的引用是相同的。我查看了 Pymongo 文档
我正在处理文件和目录,以在每个目录中查找最近修改的文件。我的代码可以工作,但作为 Ruby 的新手,我无法正确处理错误。 我使用 Find.find 获取递归目录列表,为每个目录调用我自己的函数 ne
/usr/bin/ld: cannot find -ldlib /usr/bin/ld: cannot find -lcblas /usr/bin/ld: cannot find -llapack 在
我有一些数据文件的一系列索引文件,它们基本上采用这种格式 索引文件:asdfg.log.1234.2345.index 数据文件:asdfg.log 这个想法是搜索所有索引文件。如果值 XXXX 出现
我有一个 find我运行以查找名称包含 foo 的文件的命令. 我想跳过 .git目录。下面的命令有效 除了 它打印一个 烦人 .git任何时候它跳过 .git目录: find . ( -name .
我有以下想做的事情: find . -maxdepth 6 \( -name \*.tar.gz -o -name bediskmodel -o -name src -o -name ciao -o
当我在表中查找隐藏字段时,我看到了两个隐藏字段。但是,我想通过 ID 进一步细化这两个字段。我注意到,当我使用“包含”在整个表上使用 find 时,我得到了 2 个字段。但是,如果我对隐藏字段的查找结
我正在使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹的名称中有空格。我将如何处理这些? find -type f -name \* | xargs md5sum 最佳答案 尝试:
我正在使用下面的命令生成文件列表及其 m5sum。问题是某些文件或文件夹的名称中有空格。我将如何处理这些? find -type f -name \* | xargs md5sum 最佳答案 尝试:
我有一个使用正则表达式查找文件的脚本。代码如下: find $dir | grep "$regex" 脚本运行有点慢,我想优化一下。搜索需要一些时间来执行,我想从中获得更好的性能。我试过这种尝试: f
这令人沮丧。我认为问题出在 api 响应返回的对象上。也许它是在字符串中,所以我所做的就是复制“postman”的响应并将其直接粘贴到js上。这样我就可以确定它在对象/数组中。但结果还是同样的错误。
我是一名优秀的程序员,十分优秀!