Querying with Conditions
The examples in this section query a document store and return documents that have specific conditions.
For more information about how to specify query conditions in OJAI, see Query Conditions in OJAI Applications.
The following example shows how to return all documents from a store where
address.zipCode
equals 95196, using the Query.where method. It uses an OJAI QueryCondition to specify the condition.
/**
* Copyright (c) 2017 MapR, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.mapr.ojai.examples;
import org.ojai.Document;
import org.ojai.DocumentStream;
import org.ojai.store.Connection;
import org.ojai.store.DocumentStore;
import org.ojai.store.DriverManager;
import org.ojai.store.Query;
import org.ojai.store.QueryCondition.Op;
public class OJAI_007_FindQueryWithCondition {
public static void main(final String[] args) {
System.out.println("==== Start Application ===");
// Create an OJAI connection to MapR cluster
final Connection connection = DriverManager.getConnection("ojai:mapr:");
// Get an instance of OJAI DocumentStore
final DocumentStore store = connection.getStore("/demo_table");
// Build an OJAI query with QueryCondition
final Query query = connection.newQuery()
.where(
connection.newCondition() //
.is("address.zipCode", Op.EQUAL, 95196) // Build an OJAI QueryCondition
.build()) //
.build();
// fetch all OJAI Documents from this store
final DocumentStream stream = store.find(query);
for (final Document userDocument : stream) {
// Print the OJAI Document
System.out.println(userDocument.asJsonString());
}
// Close this instance of OJAI DocumentStore
store.close();
// close the OJAI connection and release any resources held by the connection
connection.close();
System.out.println("==== End Application ===");
}
}
The following example shows how to return all documents from a store where
address.zipCode
equals 95196, using the Query.where method. It specifies the query condition using a JSON
string.
/**
* Copyright (c) 2017 MapR, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.mapr.ojai.examples;
import org.ojai.Document;
import org.ojai.DocumentStream;
import org.ojai.store.Connection;
import org.ojai.store.DocumentStore;
import org.ojai.store.DriverManager;
import org.ojai.store.Query;
public class OJAI_008_FindQueryWithConditionJson {
public static void main(final String[] args) {
System.out.println("==== Start Application ===");
// Create an OJAI connection to MapR cluster
final Connection connection = DriverManager.getConnection("ojai:mapr:");
// Get an instance of OJAI DocumentStore
final DocumentStore store = connection.getStore("/demo_table");
// Build an OJAI query with the condition specified as a JSON string
final Query query = connection.newQuery()
.where("{\"$eq\": {\"address.zipCode\": 95196}}")
.build();
// fetch all OJAI Documents from this store
final DocumentStream stream = store.find(query);
for (final Document userDocument : stream) {
// Print the OJAI Document
System.out.println(userDocument.asJsonString());
}
// Close this instance of OJAI DocumentStore
store.close();
// close the OJAI connection and release any resources held by the connection
connection.close();
System.out.println("==== End Application ===");
}
}
The following example uses an OJAI query condition specified in JSON format to return
all documents from a store where address.zipCode
equals 95196.
/*
* Copyright (c) 2018 MapR, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const { ConnectionManager } = require('node-maprdb');
const connectionString = 'localhost:5678?' +
'auth=basic;' +
'user=mapr;' +
'password=mapr;' +
'ssl=true;' +
'sslCA=/opt/mapr/conf/ssl_truststore.pem;' +
'sslTargetNameOverride=node1.mapr.com';
let connection;
// Create a connection to data access server
ConnectionManager.getConnection(connectionString)
.then((conn) => {
connection = conn;
// Get a store
return connection.getStore('/demo_table');
})
.then((store) => {
// Create an OJAI query
const query = {"$where": {"$eq": { 'address.zipCode': 95196 }}};
// fetch OJAI Documents by query
return store.find(query);
})
.then((queryResult) => {
queryResult.on('data', (document) => {
// Print OJAI Documents from document stream
console.log(document);
});
queryResult.on('end', () => {
// close the OJAI connection
connection.close();
});
});
The following example shows how to return all documents from a store where
address.zipCode
equals 95196, using the Query.where method. It uses an OJAI QueryCondition to specify the condition.
from mapr.ojai.ojai_query.QueryOp import QueryOp
from mapr.ojai.storage.ConnectionFactory import ConnectionFactory
# Create a connection to data access server
connection_str = "localhost:5678?auth=basic;user=mapr;password=mapr;" \
"ssl=true;" \
"sslCA=/opt/mapr/conf/ssl_truststore.pem;" \
"sslTargetNameOverride=node1.mapr.com"
connection = ConnectionFactory.get_connection(connection_str=connection_str)
# Get a store and assign it as a DocumentStore object
store = connection.get_store('/demo_table')
# Create an OJAI query
query = connection.new_query()\
.where(connection.new_condition()
.is_('address.zipCode', QueryOp.EQUAL, 95196)
.close()
.build())\
.build()
# fetch the OJAI Documents by query
query_result = store.find(query)
# Print OJAI Documents from document stream
for doc in query_result:
print(doc)
# close the OJAI connection
connection.close()
The following example uses an OJAI query condition specified in JSON format to return
all documents from a store where address.zipCode
equals 95196.
from mapr.ojai.storage.ConnectionFactory import ConnectionFactory
# Create a connection to data access server
connection_str = "localhost:5678?auth=basic;user=mapr;password=mapr;" \
"ssl=true;" \
"sslCA=/opt/mapr/conf/ssl_truststore.pem;" \
"sslTargetNameOverride=node1.mapr.com"
connection = ConnectionFactory.get_connection(connection_str=connection_str)
# Get a store and assign it as a DocumentStore object
store = connection.get_store('/demo_table')
# Create an OJAI query
query = {"$where": {"$eq": {"address.zipCode": 95196}}}
# options for find request
options = {
'ojai.mapr.query.result-as-document': True
}
# fetch OJAI Documents by query
query_result = store.find(query, options=options)
# Print OJAI Documents from document stream
for doc in query_result:
print(doc.as_dictionary())
# close the OJAI connection
connection.close()
The following two dbshell commands are equivalent to the code examples. See dbshell find or findbyid for more details about the syntax dbshell provides.
# mapr dbshell
maprdb root:> find /demo_table --q {"$where":{"$eq":{"address.zipCode":95196}}}
maprdb root:> find /demo_table --where {"$eq":{"address.zipCode":95196}}
The following example shows how to return all documents from a store where
address.zipCode
equals 95196, using the Query.Where
method. It uses an OJAI
QueryCondition to specify the condition.
using System;
using MapRDB.Driver;
using MapRDB.Driver.Ojai;
public class FindQueryWithCondition
{
public async void FindQueryWithCondition()
{
// Create a connection to data access server
var connectionStr = $"localhost:5678?auth=basic;" +
$"user=mapr;" +
$"password=mapr;" +
$"ssl=true;" +
$"sslCA=/opt/mapr/conf/ssl_truststore.pem;" +
$"sslTargetNameOverride=node1.mapr.com";
var connection = ConnectionFactory.CreateConnection(connectionStr);
// Get a store and assign it as a DocumentStore object
var store = connection.GetStore("/demo_table");
//Create an OJAI query
var query = connection
.NewQuery()
.Where(connection
.NewQueryCondition()
.Is("address.zipCode", QueryOp.EQUAL, 95196)
.Close()
.Build())
.Build();
// Fetch the OJAI Documents by query
var queryResult = store.Find(query);
var documentStream = await queryResult.GetDocumentAsyncStream().GetAllDocuments();
// Print OJAI Documents from document stream
foreach (var document in documentStream)
{
Console.WriteLine(document);
}
// Close the OJAI connection
connection.Close();
}
}
The following example uses an OJAI query condition specified in JSON format to return all
documents from a store where address.zipCode
equals 95196.
using System;
using MapRDB.Driver;
using MapRDB.Driver.Ojai;
public class FindQueryWithConditionJson
{
public async void FindQueryWithConditionJson()
{
// Create a connection to data access server
var connectionStr = $"localhost:5678?auth=basic;" +
$"user=mapr;" +
$"password=mapr;" +
$"ssl=true;" +
$"sslCA=/opt/mapr/conf/ssl_truststore.pem;" +
$"sslTargetNameOverride=node1.mapr.com";
var connection = ConnectionFactory.CreateConnection(connectionStr);
// Get a store and assign it as a DocumentStore object
var store = connection.GetStore("/demo_table");
// Create an OJAI query
var query =
@"{" +
@"""$where"":" +
@"{" +
@"""$eq"":{""address.zipCode"":{""$numberLong"":""95196""}}" +
@"}" +
@"}";
// Fetch OJAI Documents by query
var queryResult = store.FindQuery(query);
var documentStream = await queryResult.GetAllDocuments();
// Print OJAI Documents from document stream
foreach (var document in documentStream)
{
Console.WriteLine(document.ToDictionary());
}
// Close the OJAI connection
connection.Close();
}
}
The following example shows how to return all documents from a store where
address.zipCode
equals 95196, using the Query.WhereCondition
function. It uses an OJAI Condition to specify the condition.
package main
import (
"fmt"
client "github.com/mapr/private-maprdb-go-client"
)
func main() {
// Create connection string
connectionString := "192.168.33.11:5678?" +
"auth=basic;" +
"user=mapr;" +
"password=mapr;" +
"ssl=true;" +
"sslCA=/opt/mapr/conf/ssl_truststore.pem;" +
"sslTargetNameOverride=node1.cluster.com"
storeName := "/demo_table"
// Create a connection to DAG
connection, err := client.MakeConnection(connectionString)
if err != nil {
panic(err)
}
// Get a store and assign it as a DocumentStore struct
store, err := connection.GetStore(storeName)
if err != nil {
panic(err)
}
// Options for find request
options := &client.FindOptions{ResultAsDocument: true}
// Create a condition
condition, err := client.MakeCondition(client.Is("address.zipCode", client.EQUAL, 95196), client.Close())
if err != nil {
panic(err)
}
condition.Build()
// Create an OJAI query
query, err := client.MakeQuery(client.WhereCondition(condition))
if err != nil {
panic(err)
}
query.Build()
// Fetch all OJAI Documents from table
findResult, err := store.FindQuery(query, options)
// Print OJAI Documents from document stream
for _, doc := range findResult.DocumentList() {
fmt.Println(doc)
}
// Close connection
connection.Close()
}
The following example uses an OJAI query condition specified in JSON format to return all
documents from a store where address.zipCode
equals 95196.
package main
import (
"fmt"
client "github.com/mapr/private-maprdb-go-client"
)
func main() {
// Create connection string
connectionString := "192.168.33.11:5678?" +
"auth=basic;" +
"user=mapr;" +
"password=mapr;" +
"ssl=true;" +
"sslCA=/opt/mapr/conf/ssl_truststore.pem;" +
"sslTargetNameOverride=node1.cluster.com"
storeName := "/demo_table"
// Create a connection to DAG
connection, err := client.MakeConnection(connectionString)
if err != nil {
panic(err)
}
// Get a store and assign it as a DocumentStore struct
store, err := connection.GetStore(storeName)
if err != nil {
panic(err)
}
// Options for find request
options := &client.FindOptions{ResultAsDocument: true}
// Create an OJAI query
query := map[string]interface{}{
"$where": map[string]interface{}{
"$eq": map[string]interface{}{
"address.zipCode": 95196}}}
// Fetch all OJAI Documents from table
findResult, err := store.FindQueryMap(query, options)
// Print OJAI Documents from document stream
for _, doc := range findResult.DocumentList() {
fmt.Println(doc)
}
// Close connection
connection.Close()
}