- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
mongodb: 2.1.3
阅读了一些 aggregation enhancements 之后来到 mongoDB 3.2 我对“$look”管道阶段进行左外等值连接感到兴奋。
不幸的是, Node 驱动程序似乎没有此运算符。(我在 native driver docs for node 中没有看到它,当我尝试使用它时出现错误:
更新:这是我试过的代码
var cursor = db.collection('messagethreads').aggregate([
{"$match": {
_id: new ObjectID(threadID)}
},
{"$lookup": {
from: "messages",
localField: "_id",
foreignField: "threadID",
as: "messagesList"}
}
]);
cursor.toArray(function(err,messages){
if(err) {
res.status(500).json(error);
}
else if(convo === null){
res.status(400).end();
}
else{
res.status(200).json(messages);
}
});
});
示例 - ThreadMessage 文档
{
"_id" : ObjectId("56b4f52c0e6368c00630aee6"),
name: "Messages 1"
}
示例 - 消息文档
{
"_id" : ObjectId("56b4f52c0e6368c00630af08"),
"author" : "Nick",
"text" : "Hello",
"threadID" : ObjectId("56b4f52c0e6368c00630aee6")
},
...
预期结果
{
"_id" : ObjectId("56b4f52c0e6368c00630aee6"),
name: "Messages 1",
messageList:[
{
"_id" : ObjectId("56b4f52c0e6368c00630af08"),
"author" : "Nick",
"text" : "Hello",
"threadID" : ObjectId("56b4f52c0e6368c00630aee6")
},
...
]
}
"MongoError: exception: Unrecognized pipeline stage name: '$lookup' "
您可以阅读更多关于连接案例的信息 here !
问题:是否有预期的方法来执行与 node.js native 驱动程序等效的操作?
最佳答案
“MongoError”异常是驱动程序报告来自“服务器”的任何错误消息的方式,因此此类错误表明连接到的服务器不是支持$lookup
的版本。 , 为 3.2 或更高:
$lookup
New in version 3.2.
Performs a left outer join to an unsharded collection in the same database to filter in documents from the “joined” collection for processing. The $lookup stage does an equality match between a field from the input documents with a field from the documents of the “joined” collection.
您始终可以通过 serverStatus
获取要连接的服务器版本数据库命令。同样在完整的可复制 list 中:
var async = require('async'),
mongodb = require('mongodb'),
MongoClient = mongodb.MongoClient,
ObjectId = mongodb.ObjectId;
MongoClient.connect("mongodb://localhost/test",function(err,db) {
async.series(
[
function(callback) {
db.command({ "serverStatus": 1 }, function(err,status) {
console.log(status.version);
callback(err);
});
},
function(callback) {
async.each(['threadmessage','message'],function(colname,callback) {
db.collection(colname).remove({},callback);
},callback);
},
function(callback) {
db.collection('threadmessage').insert(
{
"_id" : ObjectId("56b4f52c0e6368c00630aee6"),
"name": "Messages 1"
},
callback
);
},
function(callback) {
db.collection('message').insert(
{
"_id" : ObjectId("56b4f52c0e6368c00630af08"),
"author" : "Nick",
"text" : "Hello",
"threadID" : ObjectId("56b4f52c0e6368c00630aee6")
},
callback
);
},
function(callback) {
var cursor = db.collection('threadmessage').aggregate([
{ "$lookup": {
"from": "message",
"localField": "_id",
"foreignField": "threadID",
"as": "messagesList"
}}
]);
cursor.toArray(function(err,result) {
console.log(JSON.stringify(result,undefined,2));
callback(err);
});
}
],
function(err) {
if (err) throw err;
db.close();
}
);
});
以及固定了驱动程序版本的 package.json,只是为了表明没有驱动程序版本问题:
{
"name": "lookup",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"async": "^1.5.2",
"mongodb": "2.1.3"
}
}
使用受支持的服务器版本提供预期的输出:
3.2.0
[
{
"_id": "56b4f52c0e6368c00630aee6",
"name": "Messages 1",
"messagesList": [
{
"_id": "56b4f52c0e6368c00630af08",
"author": "Nick",
"text": "Hello",
"threadID": "56b4f52c0e6368c00630aee6"
}
]
}
]
因此,如果该 list 未在您连接到的数据库上返回 3.2.x
,则此处不支持 $lookup
管道操作,您将不得不诉诸替代手段,例如改为“客户端”拉取“相关”信息。
关于node.js - mongoDB:聚合 - 是否有等效于 native node.js 驱动程序的 $lookup 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35232970/
如果查找返回 null 该怎么办?我正在使用 org.openide.util.Lookup 的 Lookup.getDefault().lookup() ,它用于查找对象的实例。一般模式是传递一个
我尝试了两种方法来获取给定函数的 MethodHandle。 Method 1 Method m = MyClass.class.getMethod("myMethod", String.class,
前言 前面几节都是讲的基础内容,本节我们讲讲索引性能优化,当对大数据进行处理时首先想到的就是索引,一旦遇到这样的问题则手忙脚乱,各种查资料,为何平常不扎实基本功呢,我们由浅入深,简短的内容,深入的
我试图理解 System.Linq.Lookup类(class)。调用GetType()时,显示如下: System.Linq.Lookup`2+Grouping[System.Object,Syst
什么是依赖于参数的查找有哪些好的解释?许多人也称其为Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么不好? 如何运作? 最佳答案 Koenig查找或 Argument Dep
关于什么是参数相关查找有什么好的解释?许多人也称它为 Koenig Lookup。 最好我想知道: 为什么是好事? 为什么是坏事? 它是如何工作的? 最佳答案 Koenig 查找 , 或 Argume
我有两个 mongo 集合,一个包含约会提醒,另一个包含通知。我正在尝试返回给定的branchId/clinic_id中的所有存档:错误提醒的结果,并包括其已确认的:错误通知。另外,我想确保约会显示在
关于什么是参数依赖查找有什么好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何工作的? 最佳答案 Koenig 查询 , 或
我正在 AX 2009 中的一个表单上创建一个项目。有一个名为“SubsPersonName”的查找字段,它使用以下方法对 ContactPerson 表执行查找。 public void looku
关于什么是参数依赖查找有哪些好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何工作的? 最佳答案 Koenig 查找,或 A
关于什么是参数依赖查找有哪些好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何运作的? 最佳答案 Koenig 查找,或 A
关于什么是参数依赖查找有哪些好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何工作的? 最佳答案 Koenig 查找,或 A
关于什么是参数依赖查找有哪些好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何工作的? 最佳答案 Koenig 查找,或 A
关于什么是参数依赖查找有哪些好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何运作的? 最佳答案 Koenig 查找,或 A
关于什么是参数依赖查找有哪些好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何运作的? 最佳答案 Koenig 查找,或 A
关于什么是参数依赖查找有哪些好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何工作的? 最佳答案 Koenig 查找,或 A
关于什么是参数依赖查找有哪些好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何工作的? 最佳答案 Koenig 查找,或 A
关于什么是参数依赖查找有什么好的解释?许多人也将其称为 Koenig Lookup。 最好我想知道: 为什么这是一件好事? 为什么这是一件坏事? 它是如何工作的? 最佳答案 Koenig 查找,或 A
以下函数将电话号码作为输入参数(例如 +436641234567 或 +436641234567)并在联系人数据库中执行两次查找:首先,识别属于该号码的用户(这已经有效),然后使用该 ID用户的 获取
我设置了一个运行centos6.2 64位的virtualbox客户端机器,主机是windows7 64位,并在客户端机器上设置了两个网卡,一个是NAT模式,一个是host-only模式,然后我就陷入
我是一名优秀的程序员,十分优秀!