1

db.system.js.save用来在服务器上保存 js 函数。

到目前为止我写了这个脚本

function () {
cursor = db.MyCollection.find({_id: {$in:[arguments]}})
                                             ^ this does not work
        while(cursor.hasNext()){print(cursor.next())};       
}

我用以下参数调用它findAllDocuments(ObjectId("544a30c80c80d5809180b"),<more objects>);,但它不起作用。

我必须以arguments不同的方式称呼它吗?因为arguments[0]正在工作例如。


编辑:为了澄清arguments是javascript函数的参数。

findAllDocuments(ObjectId("544a30c80c80d5809180b"),ObjectId("544a30c80c80d5809180b"), <and more objectIds>); 如果我像这样使用它,它确实可以工作,但参数长度可以是可变的。

function () {
cursor = db.MyCollection.find({_id: {$in:[arguments[0],arguments[1]}})
                                             ^ this does work
        while(cursor.hasNext()){print(cursor.next())};       
}

编辑2:

如何在 $ref 中正确使用 $in?

 cursor = db.MyCollection.find({"trainer" : {
        "$ref" : "Contact",
        "$id" : {$in : [ObjectId("556d901118bfd4901e2a3833")]}
                  ^it executes successfully, but does not find anything
    }})
4

1 回答 1

2

如果arguments已经是一个数组,则不需要将其传递到另一个数组中:

var arguments = [4, 8, 15, 16, 23, 42];
db.col.find({_id: {$in: arguments}})

如果您使用的对象不是数组,则必须将它们包装在数组中:

db.col.find({_id: {$in: [arguments[0], arguments[1], arguments[2]]}})

请记住,您的$in运算符将无法使用嵌套数组,因此如果数组的每个元素本身都是一个数组,您可能需要将它们合并到一个更大的数组中。

于 2015-06-02T12:54:35.740 回答