4

これは私が試した元のコードです:

obj = {
    sentence:  "this is a sentece", 
    tags: [ "some", "indexing", "words"]     
}

findOne({tags: "words"}).name);

Delphi 用の MongoDB のラッパーとしてTMongWireを使用し、次のように記述しました。

//var
//  d:IBSONDocument;
d:=BSON([
    'id',mongoObjectID,
    'sentence', 'this is a sentece',
    'tags','["some", "indexing", "words"]'
]);
FMongoWire.Insert(theCollection,d);

上記のコードが機能しているようです


しかし、「タグ」でクエリを実行すると、うまくいかないようです

//var 
//q:TMongoWireQuery;
//qb:IBSONDocument 
qb:=BSON(['tags', '"words"']); //***
q:=TMongoWireQuery.Create(FMongoWire);
q.Query(mwx2Collection, qb); //***

*アスタリスクで2行を書くにはどうすればよいですか?

4

2 に答える 2

6

エラーはクエリではなく、フィールドの作成に少し含まれています。

あなたが書いたように、タグフィールドを文字列の配列ではなく、文字列プロパティとして作成しました。

d:=BSON([
    'id',mongoObjectID,
    'sentence', 'this is a sentece',
    'tags',VarArrayOf(['some', 'indexing', 'words'])
]);
FMongoWire.Insert(theCollection,d);

VarArrayOf()文字列の配列を作成するには、呼び出す必要があります。

編集:紹介VarArrayOf()

于 2012-07-08T14:43:12.327 に答える
3

TMongoWire は OleVariant を最大限に使用しようとするため、たとえばVarArrayOfを使用して、配列をバリアント配列として渡します。

FMongoWire.Insert(theCollection,BSON([
    'id',mongoObjectID,
    'sentence', 'this is a sentece',
    'tags',VarArrayOf(['some', 'indexing', 'words'])
]);

また、文字列を解析する JavaScript 表記法がないため、次のように記述します。

q.Query(mwx2Collection, BSON(['tags','words']));
于 2012-07-09T06:02:05.957 に答える