Parse.com查询包含指针数组

Wil*_*ill 4 javascript parse-platform

原始问题

我正在尝试查询其中ID allFriends与ID匹配的所有实例Creator. allFriends是来自早期查询的ID数组.containedIn使用指针数组的正确语法是什么.

所有朋友:

["1EGomEr0Tk", "iMJbVrPfGG", "DVOwabZkaQ", "zhvd8mAdhl"]

码:

query.containedIn("Creator", {
                __type: "Pointer",
                className: "User",
                objectId: allFriends
            })
Run Code Online (Sandbox Code Playgroud)

错误:

code: 102
error: "$in requires an array"
Run Code Online (Sandbox Code Playgroud)

更新#1

我发现我需要将allFriendsID数组转换为指针映射.但是_.map被计算为未定义.

码:

var pointers = _.map(allFriends, function(item_id) {
            var pointer = new Parse.Object("allFriends");
            pointer.id = item_id;
            return pointer;
            });
            query.containedIn("Creator", pointers);
Run Code Online (Sandbox Code Playgroud)

错误:

Uncaught ReferenceError: map is not defined
Run Code Online (Sandbox Code Playgroud)

Tim*_*ers 11

如果您的"Creator"列的类型为Pointer <_User>,并且您的allFriends数组是用户的ID数组,那么您需要执行以下操作:

从以下位置创建一个Pointer <_User>对象数组allFriends:

var pointers = _.map(allFriends, function(friendId) {
  var pointer = new Parse.User();
  pointer.id = friendId;
  return pointer;
});
Run Code Online (Sandbox Code Playgroud)

一旦你有一个Pointer <_User>数组,你就可以比较你的列:

query.containedIn('Creator', pointers);
Run Code Online (Sandbox Code Playgroud)

你非常接近,这只是创造正确指针的问题.


dan*_*anh 5

Parse允许您定义指针列或数组列.数组是标量类型(数字,字符串等)的有序集合,或者它们可以是指针数组.

指针

获取和设置指针时,操作数是PFObject.换句话说,对于二传手:

myObject.set("somePointerCol", someOtherObject);
Run Code Online (Sandbox Code Playgroud)

someOtherObject是一个PFObject,可能是一个空的,只有一个ID定义(正如你在编辑中指出的那样).对于吸气剂:

myQuery.first().then(function(myObject) {
    var someOtherObject = myObject.get("somePointerCol");
});
Run Code Online (Sandbox Code Playgroud)

someOtherObject将是一个空的PFObject,只设置了objectId.如果您还希望获取引用的对象,则可以按如下方式限定查询:

myQuery.include("somePointerCol");
// someOtherPointerCol on the retrieved object will contain a complete, fetched object
Run Code Online (Sandbox Code Playgroud)

指针数组和数组

PFObject为数组提供了几种方法,您可以使用add和添加到数组中addUnique,并使用remove从中删除.优雅的部分是,当数组是指针数组时,这些方法可以很容易地应用.

myObject.addUnique("arrayOfPointersCol", someOtherObject);
// or...
myObject.remove("arrayOfPointersCol", someOtherObject);
Run Code Online (Sandbox Code Playgroud)

最后,PFQuery相当透明地处理数组.要查找arrayOfPointersCol包含PFObject的任何myObject,请使用equalTo,就像它只是一个值一样.

myQuery.equalTo("arrayOfPointersCol", someOtherObject);

// if you have only an id, say someId, then
var SomeOtherClass = Parse.Object.extend("SomeOtherClass");
var someOtherObject = new SomeOtherClass();
someOtherObject.id = someId;

myQuery.equalTo("arrayOfPointersCol", someOtherObject);
Run Code Online (Sandbox Code Playgroud)

与非数组指针类似,您可以急切地获取该数组中的所有元素:

myQuery.include("arrayOfPointersCol");  // but be careful, keep array lengths short
Run Code Online (Sandbox Code Playgroud)

下划线

最后,与数组或指针思想无关,您当然可以映射一个对象ID数组,将它们转换为指针对象数组.您发布的代码看起来很好,但它取决于下划线库 - 这是一个非常有用的库,提供_.map函数和许多其他函数.